- 博客(17)
- 资源 (5)
- 收藏
- 关注
原创 Glide导致的RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap
文章目录Glide使用背景使用方式一:into传入ImageView分析1:scaleType=fitXY是否会导致trying to use a recycled bitmap异常?分析2:into传入imageView是否会导致trying to use a recycled bitmap异常?使用方式二:into传入ViewTarget异常原因分析解决方案Glide导致的RuntimeException: Canvas: trying to use a recycled bitmap android
2021-06-14 23:58:47
4244
3
原创 LinkedHashMap源码解析(基于JDK1.8)
文章目录整体数据结构操作集合添加元素获取元素删除元素遍历参考文章LinkedHashMap源码解析(基于JDK1.8)整体数据结构LinkedHashMap继承自HashMap,实现了Map接口,存储元素的基本结构还是数组与单向链表(jdk1.8版本后,当链表长度大于8时,转换为红黑树存储)的结合,从而支持hash桶读写,当有重复的元素添加时只是修改原来的值。(这部分原理和HashMap原理一致)。LinkedHashMap内所有节点通过双向链表关联,节点的实现是内部类LinkedHashM
2021-06-13 00:22:53
382
3
原创 Android Binder机制情景源码分析之Binder回调注册和反注册
我们在日常开发中,经常用到Binder来进行跨进程通信,有个比较常见的场景是向服务端注册Binder回调,比如:IActivityManager中有两个成对的方法,Client端向AMS所在的服务端注册或者反注册IProcessObserver类型的Binder回调接口如果使用匿名内部类、成员内部类、方法中的local类,直接作为成员注册,可能会造成内存泄漏。
2018-12-21 11:34:20
2169
1
原创 Android app启动流程(Activity启动过程)【基于Android 8.1】
从Launcher启动app的LauncherActivityLauncher.startActivity或者Context.startActivity【ContextImpl.startActivity 】都会调用到Instrumentation.execStartActivity方法定义在frameworks/base/core/java/android/app/Instrumentation.java文件中:ActivityManager.getService()返回ActivityManagerS
2018-11-14 19:58:56
1829
原创 Activity工作流程原理
Step 1. Launcher.startActivitySafelyStep 2. Activity.startActivityStep 3. Activity.startActivityForResult(intent, -1); Step 4. Instrumentation.execStartActivity -- ActivityManagerNative.getDefa
2018-01-28 01:25:44
1888
原创 Android源码中的单例模式android.util.Singleton
Android源码中的单例模式android.util.SingletonAndroid系统源码中的单例模式: 代码路径:/frameworks/base/core/java/android/util/Singleton.javapackage android.util;/** * Singleton helper class for lazily initialization. * *
2017-11-28 17:03:14
2233
原创 子线程真的不能更新UI吗?
主线程/UI线程真的不能更新UI吗?其实,在onResume以及onResume之前,开启一个子线程来更新UI,都有可能是会成功的,并且成功率相当大,失败的情况应该也会有,比较极端的情况下,UI线程一直霸占的CPU,子线程一直执行不到。子线程更新UI代码如下:@Override protected void onResume() { new Thread(new R
2017-11-24 01:21:15
861
原创 Activity dispatchTouchEvent事件分发的源头
WMS获取Touch事件—>ViewRootImpl.deliverInputEvent—>ViewRootImpl$InputStage(即ViewPostImeInputStage).deliver【这个过程不同Android版本不一样】—>ViewRootImpl$ViewPostImeInputStage.onProcess—>ViewRootImpl$ViewPostIm
2017-11-14 11:55:22
1715
原创 统计从1到N中1的个数的算法
问题:给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。例如:N= 2,写下1,2。这样,1的个数是1。N= 12,我们会写下1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12。这样,1的个数是5。算法a如下: public static int getOneCount(int n){
2017-10-16 22:19:01
1959
原创 startService和bindService
startService和bindService同时调用后, 必须对应调用stop和unbind,Service才会destroy。一个已经存活的Service被bind过,然后解绑后重新bind,Service的onBind方法可能不会再次被调用,因为intent相同:public boolean filterEquals(Intent other) { if (other
2017-08-31 14:51:27
504
原创 Activity的启动模式,任务栈Task,intent的Flags
一、相关概念application翻译成中文时一般称为“应用”或“应用程序”,在android中,总体来说一个应用就是一组组件的集合。而task是在程序运行时,只针对activity的概念。说白了,task是一组相互关联的activity的集合,它是存在于framework层的一个概念,控制界面的跳转和返回。这个task存在于一个称为back stack的数据结构中,也就是说,fram
2017-08-02 13:43:34
654
原创 android非正常关掉应用操作--最近任务列表,应用管理
手机实测现象:(华为荣耀3C--Android4.2,魅族MX5--Android5.1)1) 长按home键,左右滑动卡片,task的root activity的onDestroy会走2) 长按home键, 按清除按钮,task的root Activity的onDestroy会走, 但是这种情况好像是需要在长按home键和按清除按钮之间, 间隔一会儿,不等会儿的话,就不会走3)
2017-07-27 18:00:13
3658
转载 android最近任务列表,删除某个应用操作
1、SystemUI工程RecentsActivity.Java protected void onCreate(BundlesavedInstanceState) { getWindow().addPrivateFlags(WindowManager.LayoutParams.PRIVATE_FLAG_INHERIT_TRANSLUCENT_DECOR);
2017-07-27 17:47:34
4309
5
原创 android:hint属性对TextView(或者EditText)的影响--源码分析
textView.setText("哈哈");textView.setHint("哈哈哈哈哈哈");hint属性对TextView(或者EditText)的影响,直接看下图:使用上下两个TextView控件进行对比,第一行的“哈哈哈哈哈哈哈”是作为对比的TextView,第二行的“哈哈”是上面代码操作的TextView找到TextView.setHint(CharS
2017-07-26 17:35:43
5461
原创 Callback异步回调接口
/** * 用于网络请求结果的回调的抽象类,使用该类可以保证网络请求在主线程发起,在子线程回调 * 使用的异步任务,并且保证了异步任务的创建在主线程执行 */public abstract class Callback { private AsyncTask asyncTask; private T obj; private int code; privat
2017-06-28 11:07:58
1696
原创 轻量级任务队列
public abstract class TaskQueue { private Thread execThread; private List queue = new LinkedList(); public void addTask(T task) { queue.add(task); if (null == execThread |
2017-06-02 11:52:40
627
原创 ListView适配器BaseAdapter之getView的原理--convertView源码分析Android5.1
ListView.setAdapter后, List中每个item,要求 adapter 调用返回一个View 。如果我们有成千上万的item要显示怎么办?为每个item创建一个新视图是不可取的!实际上Android为为我们缓存了视图。Android中有个叫做Recycler的构件,下图是他的工作原理:做了一个测试: @Override public Vi
2015-11-30 19:33:42
2534
Android 多线程下载仿下载助手AS
2015-07-29
Android 多线程下载 仿下载助手
2015-07-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人