自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(134)
  • 资源 (1)
  • 收藏
  • 关注

原创 Glide 缓存机制

Glide 缓存机制@Nullableprivate EngineResource<?> loadFromMemory( EngineKey key, boolean isMemoryCacheable, long startTime) { if (!isMemoryCacheable) { return null; } //从弱引用对象加载 图片加载过二次加载会从弱引用对象加载 EngineResource<?> active = lo

2021-06-01 15:48:47 575

原创 Data Binding 使用

private ActivityMainBinding mBinding;protected void onCreate(Bundle savedInstanceState) { mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);}public void updateUI(User user) { mBinding.setUser(user);.

2021-03-24 13:22:38 324

原创 RecyclerView优化

RecyclerView优化-滚动性能改进Banner Recyclerview优化滚动性能改进在此博客中,我们将学习如何优化Android中的RecyclerView性能。通过这些优化,我们可以使RecyclerView滚动平滑。当我们在Android应用程序中实现RecyclerView时,有时会遇到类似以下问题:RecyclerView项滚动不流畅。由于我们的Android应用似乎很落后,因此会导致糟糕的用户体验。让我们看看我们可以做些什么来提高RecyclerView的性能,从而获得流畅的滚

2021-03-22 14:37:07 269 1

原创 android 动画,HashMap,数据结构,Retrofit

帧动画帧动画是最容易实现的一种动画,这种动画更多的依赖于完善的UI资源,他的原理就是将一张张单独的图片连贯的进行播放,从而在视觉上产生一种动画的效果;有点类似于某些软件制作gif动画的方式。如上图中的京东加载动画,代码要做的事情就是把一幅幅的图片按顺序显示,造成动画的视觉效果。京东动画实现<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas..

2021-02-23 16:41:06 229 3

原创 高效加载大图

图片有不同的形状与大小。在大多数情况下它们的实际大小都比需要呈现的尺寸大很多。例如,系统的图库应用会显示那些我们使用相机拍摄的照片,但是那些图片的分辨率通常都比设备屏幕的分辨率要高很多。考虑到应用是在有限的内存下工作的,理想情况是我们只需要在内存中加载一个低分辨率的照片即可。为了更便于显示,这个低分辨率的照片应该是与其对应的UI控件大小相匹配的。加载一个超过屏幕分辨率的高分辨率照片不仅没有任何显而易见的好处,还会占用宝贵的内存资源,另外在快速滑动图片时容易产生额外的效率问题。这一课会介绍如何通过加载

2021-02-22 11:10:59 189

原创 避免出现程序无响应ANR(Keeping Your App Responsive)

可能你写的代码在性能测试上表现良好,但是你的应用仍然有时候会反应迟缓(sluggish),停顿(hang)或者长时间卡死(frezze),或者是应用处理输入的数据花费时间过长。对于你的应用来说最槽糕的事情是出现"程序无响应(Application Not Responding)" (ANR)的警示框。在Android中,系统通过显示ANR警示框来保护程序的长时间无响应。对话框如下:此时,你的应用已经经历过一段时间的无法响应了,因此系统提供用户可以退出应用的选择。为你的程序提供良好的响应性是至关重

2021-02-22 10:59:05 289

原创 为多线程创建管理器

如果你想在一个数据集中重复执行一个任务,而且你只需要一个执行运行一次。这时,使用一个IntentService将能满足你的需求。 为了在资源可用的的时候自动执行任务,或者允许不同的任务同时执行(或前后两者),你需要提供一个管理线程的集合。 为了做这个管理线程的集合,使用一个ThreadPoolExecutor实例,当一个线程在它的线程池中变得不受约束时,它会运行队列中的一个任务。 为了能执行这个任务,你所需要做的就是把它加入到这个队列。一个线程池能运行多个并行的任务实例,因此你要能保证你的代码是线程安全

2021-02-22 10:33:19 128

原创 Android 组件化、插件化、热修复

一、组件化组件化开发就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。组件化架构示意图优点:1.将APP业务模块分开开发和维护,有利于提高效率2.一个业务分为一个组件,每个组件可以单独开发以实现并发开发,进一步提高效率3.每个组件充分解耦4.每个组件可以单独测试5.架构灵活组件化路由框架:ARouterA fr..

2021-02-22 10:08:33 254

原创 activity启动模式

standardactivity默认每一个任务栈都是一个Task,当我们Task调用其他Task的activity时候,我们的Task会增加一个其他Task的activity,但是其他Task的任务栈不会被打开,回到桌面我们在次点击其他Task,并不会显示已经打开的activity,这种是android 默认规程,在不同Task中打开同一个activity,activity会被创建多个实例,分别放到每一个task中.互不干扰.singleTask当我们使用singleTask时,Task叠加.

2021-02-19 11:40:30 81 1

原创 android 事件分发

在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,总结一句:事件分发机制很重要。Android 事件分发流###在理解android 事件分发之前,我们要知道view和viewGroup的分发机制是不一样的.不管是view还是viewGroupviewGroup当我们点击一个viewGroup时,最先获取事件肯定

2021-02-18 16:00:53 134 1

原创 android apk 优化

到现在为止每个人知道apk大小是一个重要的因素,它涉及用户获取,谁会等30分钟下载一些大型应用程序减少apk大小.通常膨胀的理解是来自两个关键因素-资源和代码,而且由于资源可以解释最大的膨胀,并且是最容易修复的,我们将从哪里开始.我们需要做的第一件事,也是最重要的是事情确保你正确使用删除为使用的资源android {buildTypes { release { ...

2019-06-27 10:49:24 393

原创 OkHttp

Okhttp的高效体现在,okhttp内有个Dispatcher类,是okhttp内部维护的一个线程池,对最大连接数,host最大访问量做了初始定义。维护3个队列及1个线程池readyAsyncCalls待访问请求队列,里面存储准备执行的请求。runningAsyncCalls异步请求队列,里面存储正在执行,包含已经取消但是还没有结束的请求。runningSyncCal...

2019-03-06 13:07:24 2603

原创 startActivity()详解

startActivity()详解class ReceiverRestrictedContext extends ContextWrapper { ReceiverRestrictedContext(Context base) { super(base); }} final Context getReceiverRestrictedContext...

2018-08-02 11:43:51 43538 1

原创 Fragment getActivity详解

Fragment getActivity详解首先先来看下官网对getActivity解释: public final Activity getActivity () Return the Activity this fragment is currently associated with. 返回此fragment当前与之关联的Activity。接下来我们对源码角度来分析getAct...

2018-08-01 16:55:29 7326

原创 getApplicationContext 详解

getApplicationContext 详解1.首先我们先要知道Activity 父亲是Context ,Context 是个抽象类,ContextImpl 是Context 具体实现类.ContextWrapper也是继承于Context ,ContextWrapper使用代理方式调用ContextImpl.2.想了解系统相关的知识,必须先要熟悉系统运行流程,系统是如何启动,如何...

2018-08-01 13:36:58 42498 2

原创 Handler导致内存泄露 Handler Message Looper 原理

Handler,一个Handler允许发送和处理Message或者Runnable对象,并且会关联到主线程的MessageQueue中。每个Handler具有一个单独的线程,并且关联到一个消息队列的线程,就是说一个Handler有一个固有的消息队列。当实例化一个Handler的时候,它就承载在一个线程和消息队列的线程,这个Handler可以把Message或Runnable压入到消息队列,并且从...

2017-03-31 11:16:40 303

原创 anroid 布局过度绘制总结

什么是过度绘制然后随着UI对象不断升级,渲染流程也变得越来越复杂,列如说绘制图像,就是把图片上传到CPU存储器然后传递到GPU中进行渲染,路径使用是完全另外一码事,你需要在GPU中创建一系列的多边形,甚至在GPU中创建掩蔽纹理来定义路径。绘制字符更加复杂一些,首先我们需要在CPU中把字符绘制争图像,然后把图像上传到GPU进行渲染再返回到CPU,在屏幕上为字符串的每个字符绘制一个正方形,现

2016-08-12 15:45:21 4154

原创 android 内存优化 Enums

在代码中使用枚举EnumsAndroid官网上明确提示避免使用枚举Enums Enums often require morethan twice as much memory as static constants. You should strictly avoid usingenums on Android.事实有些细微差别,而且和性能与内存膨胀之间的差别有着很大的关系。当你

2016-06-13 17:32:24 809

翻译 Fragment

Fragment 表示 Activity 中的行为或用户界面部分。您可以将多个片段组合在一个 Activity 中来构建多窗格 UI,以及在多个 Activity 中重复使用某个片段。您可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且您可以在 Activity 运行时添加或删除片段(有点像您可以在不同 Activity 中重复使用的“子 Ac

2016-05-25 10:33:37 3582 2

翻译 Activity

ActivityActivity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。一个应用通常由多个彼此松散联系的 Activity 组成。 一般会指定应用中的某个 Activity 为“主” Acti

2016-05-25 10:31:34 4081 2

原创 flutter widget

使用Positioned微件包裹Stack的子项并设置参数(顶部,底部,左侧,右侧,高度和宽度)以实现所需的Stack布局。SafeArea Flutter的SafeArea工具可以避免讨厌的消息通知栏和不规则的手机屏幕干扰您的应用程序的正常显示。它使用MediaQuery来检查屏幕的尺寸,并使用一个子工具来匹配您的应用程序,确保它能在iOS和Android上都正常显示!监听网络请求返回状态。Expanded Flutter的Expanded将改变发送给行和列的子项的约束,指示它们填补可用的空间。

2022-12-20 16:44:29 378 1

转载 How to Encrypt Video for HLS

How to Encrypt Video for HLS40 RepliesIn this post, we’ll look at what encryption HLS supports andhow to encrypt your videos with ffmpeg.Encryption is the process of encoding information in such a way that only authorised parties can read it. The en.

2021-11-14 17:28:55 695

原创 android 内存管理

内存管理分为:堆栈方法区静态方法区常量池 存放 -> final static

2021-06-04 17:11:58 167 1

原创 okHttp3

浅析okHttp3的网络请求流程okHttp目前可以称的上是Android主流网络框架,甚至连谷歌官方也将网络请求的实现替换成okHttp.网上也有很多人对okHttp的源码进行了分析,不过基于每个人的分析思路都不尽相同,读者看起来的收获也各不相同,所以我还是整理了下思路,写了点自己的分析感悟。本文基于okhttp3.11.0版本分析基本用法String url = "http://www.baidu.com";//'1. 生成OkHttpClient实例对象'OkHttpClie

2021-05-18 16:41:21 486

转载 view.postDelayed()不执行原因

今天写代码的时候发现一段模拟延时逻辑内的代码怎么也不执行。延时用的View#postDelayed()。而对比了下,用Handler#postDelayed()又没有问题。折腾了好一会。最后发现是执行view.postDelayed()之前,view被remove了如果在执行view.postDelayed()之前,view被remove了。那么View#postDelayed()就会因为View#mAttachInfo为null,而将action发送到View#getRunQueue()...

2021-05-06 14:38:34 1040

原创 2021-03-22

我们看看将图像加载到android ImageView中时我们面临的问题。内存不足错误。将图像缓慢加载到视图中。UI变得无响应。滚动不流畅。所有这些问题都可以通过库Glide和Fresco来解决。Glide库,用于在Android上加载图像。让我们一一看一下它是如何解决这些问题的1.内存不足错误最大的噩梦是所有Android开发人员的生命。为了让我们开心,Glide进行了下采样。下采样意味着将位图(图像)缩放为视图实际需要的较小尺寸。假设我们有一个尺寸为2000 * 2000的图像,但视图尺

2021-03-22 16:53:51 89

原创 2021-03-18

美团一面:技术面手写算法题。一共有几个,面试官会随机抽一个作为题目。给出一个序列包含n个正整数的序列A,然后给出一个正整数x,你可以对序列进行任意次操作的,每次操作你可以选择序列中的一个数字,让其与x做按位或运算。你的目的是让这个序列中的众数出现的次数最多。请问众数最多出现多少次?1.Activity的生命周期、加载模式。 什么时候会用到singleTask?2.Handler机制 子线程可以创建handler吗?一个线程是否只有一个Looper? 如何保证一个线程只有一个Looper?3.多线

2021-03-18 20:47:51 226 1

原创 启动与停止线程池中的线程

在前面的课程中向你展示了如何去定义一个可以管理线程池且能在他们中执行任务代码的类。在这一课中我们将向你展示如何在线程池中执行任务代码。为了达到这个目的,你需要把任务添加到线程池的工作队列中去,当一个线程变成可运行状态时,ThreadPoolExecutor从工作队列中取出一个任务,然后在该线程中执行。这节课同时也向你展示了如何去停止一个正在执行的任务,这个任务可能在刚开始执行时是你想要的,但后来发现它所做的工作并不是你所需要的。你可以取消线程正在执行的任务,而不是浪费处理器的运行时间。例如你正在从网络上

2021-02-22 10:53:09 3499

翻译 Android学习——手把手教你实现Android热修复

前言最近一段时间看了一些关于Android热修复的知识,比如Andfix,Tinker,Sophix等,看了这些框架的原理,就想着自己能不能手撸一个简单的demo。下面我们就来自己动手实现Android热修复吧。热修复实现原理所谓热修复就是,在我们应用上线后出现小bug需要及时修复时,不用再发新的安装包,只需要发布补丁包,在客户不知不觉之间修复掉bug,JAVA虚拟机JVM在运行时,加载的是.classes的字节码文件。而Android也有自己的虚拟机Dalvik/ART虚拟机,不过他们加载的是

2021-02-01 10:59:28 367

原创 Android焦点分发和移动的原理

如果Activity里有EditText,那么打开Activity后,EditText会自动获取焦点。为什么呢,很多时候我们不想要这个效果,参照网上的方法将father layout设置成获取焦点就解决问题。知其然知其所以然,翻了一下代码,答案隐藏在ViewRootImpl.performTraversals方法中,就是那个view绘制的核心方法,中间有一段:private void performTraversals() { //... if (mFirst) { ..

2020-08-04 10:14:34 903

转载 Android 生成自己的implementation依赖

android开发时,使用implementation依赖其他Library是很方便的功能,如自己的自定义控件,配置在网上后,在build.gradle中直接implementation非常方便,为了方便自己使用的一些自定义控件或其他library,特意搜索一下此方法的实现,在此记录方便自己后续使用.以下方法直接在网上查到,资料太多,所以就不写来源了.可以使用GitHub+jitpack来实现直接的implementation依赖github创建repository等不做介绍.配置创建An

2020-07-30 10:10:36 1721

原创 leanback 使用

leanback 使用添加 TV 库Jetpack 包含用于 TV 应用的androidx软件包库。这些库为 TV 设备提供了 API 和界面微件。androidx.leanback.appandroidx.leanback.databaseandroidx.leanback.graphicsandroidx.leanback.mediaandroidx.leanback.preferenceandroidx.leanback.systemandroidx.lean..

2020-07-17 13:36:01 3874

转载 android 面试

1、Activity生命周期?onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDetroy()2、Service生命周期?service 启动方式有两种,一种是通过startService()方式进行启动,另一种是通过bindService()方式进行启动。不同的启动方式他们的生命周期是不一样.通过startService()这种方式启动的service,生命周期是这样:调用

2020-05-29 09:51:21 566

原创 Netty

Netty是什么?1)本质:JBoss做的一个Jar包2)目的:快速开发高性能、高可靠性的网络服务器和客户端程序3)优点:提供异步的、事件驱动的网络应用程序框架和工具通俗的说:一个好使的处理Socket的东东如果没有Netty?远古:java.net + java.io近代:java.nio其他:Mina,Grizzly与Mina相...

2019-11-15 13:43:56 87

转载 关于android studio找不到subversion的解决方法

一天工作中,电脑突然蓝屏,估计是bluestack造成的,再次打开android studio发现svn不能使用了,尝试了各种方法解决不了,我想估计是android studio的某个配置设置subversion插件不能使用了吧,于是去找stusio的所在目录看看,所幸在C:\Users\Administrator\.AndroidStudio1.2\config下发现了个文件:disabled_...

2019-11-07 18:48:04 233 1

原创 编译调试 APK

要立即测试和调试应用,您可以编译调试 APK。调试 APK 会使用 SDK 工具提供的调试密钥进行签名,并允许通过adb调试。要编译调试 APK,请打开命令行,然后转到项目的根目录。要启动调试编译,请调用assembleDebug任务: ./gradlew assembleDebug 调用./gradlewassembleDebug编译,我们会...

2019-11-06 14:08:30 208

原创 android:usesCleartextTraffic

android:usesCleartextTraffic 指示应用程序是否打算使用明文网络流量,例如明文HTTP。目标API级别为27或更低的应用程序的默认值为“ true”。面向API级别28或更高级别的应用默认为“ false”。当属性设置为“ false”时,平台组件(例如,HTTP和FTP堆栈,DownloadManager和MediaPlayer)将拒绝应用程序使用明文流量的...

2019-11-05 17:27:28 48818

原创 oppo 通知栏权限关闭官方解释

15、我集成了OPPOPUSH,为什么通知栏权限是关闭的?目前通知栏权限默认关闭,需要用户手动开启,建议在APP内做弹框提示,引导用户手动开启应用通知权限。问题:我发现部分app 比如抖音 西瓜视频 喜马拉雅 应用启动通知栏权限默认都是开启的. 不知道他们怎么绕过这个问题的...

2019-09-20 13:43:38 4925 3

原创 hook

什么是hook如题,我是用hook实现一键换肤。那么什么是hook? hook,钩子. 安卓中的hook技术,其实是一个抽象概念:对系统源码的代码逻辑进行"劫持",插入自己的逻辑,然后放行。注意:hook可能频繁使用java反射机制···...

2019-09-02 10:44:30 246

原创 ApplicationThreadNative

https://android.googlesource.com/platform/frameworks/base/+/47fb191/core/java/android/app/ApplicationThreadNative.java

2019-08-23 13:43:39 218

SetPrice.kt

SetPrice.kt

2021-05-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除