- 博客(17)
- 收藏
- 关注
原创 setContentView流程
1、activity、window、DecorView、ViewRoot之间的预备知识activityactivity是Android的四大组件之一,负责控制activity的生命周期和处理事件,负责视图的添加与显示,以及通过一些回调方法与window和View进行交互。一个activity包含一个window,window才是真正的窗口WindowWindow是一个抽象类,它真正的实现类是PhoneWindow。Window通过WindowManager加载一个DecorView到Window中,
2021-12-13 15:06:00
1787
原创 Okhttp3源码分析
Okhttp3 使用get请求1.拿到OkhttpClient对象 OkHttpClient client = new OkHttpClient();2.构造Request对象 Request request = new Request.Builder().url(url).get().build();3.将request封装为call Call call = client.newCall(request);4.根据需求使用同步或者异步方法 //同步调用 try
2021-10-14 17:17:52
485
原创 Android app启动流程分析
app的启动方式App启动有三种状态,每种状态都会影响App对用户可感知的时间:冷启动,热启动和温启动。注意:在冷启动中,应用从头开始启动。在其他状态下,系统需要将后台运行中的应用带入前台。建议您始终在假定冷启动的基础上进行优化。这样做也可以提升温启动和热启动的性能。冷启动冷启动是指应用从头开始启动:系统进程在冷启动后才创建应用进程。发生冷启动的情况包括应用自设备启动后或系统终止应用后首次启动特点:冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和
2021-09-26 14:34:52
774
原创 ArrayList源码解析
一、简介ArrayList 是以初始容量大小为10的数组实现的,超出容量大小时通过System.arraycopy()会扩容原大小的50%的容量,如果扩容之后还不满足需求,就直接扩容为需求的大小。ArrayList是按照数组下标访问元素 get(i)/set(i,e)的性能高,这个是数组的优势。直接在数组的末尾加入元素add(e)的性能也高,但是如果按照下标插入、删除元素add(i,e),remove(i),remove(e),则需要通过System.arraycopy()来移动部分受影响的元素,性能
2021-08-26 11:07:10
76
原创 handler机制-从源代码带你看消息机制(一)
简介:Android 端的消息机制的核心是线程和消息队列,构成这个消息机制的核心就是handler、Looper、MessageQueue、Messge。下面我们通过源代码一步分析Android端如何通过handler来发送和接收消息的。一、handler1、什么是handler 1 2 /** 3 * 默认构造方法 4 */ public Handler() { this(null, false); 7...
2021-04-13 17:32:59
212
原创 Android ANR的产生和监控
什么是ANRANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完 成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR 在 Android 里,应用程序的响应性是由 Activity Manager 和 WindowManager 系统服务监视的。当它监测到以下 情况中的一个时,Android 就会针对特定的应用程序显示 ANR。ANR的分类Service Timeout (服务) Broa
2021-01-21 17:03:53
250
原创 Android 内存优化与OOM(3)-内存三大问题
目录内存三大问题:内存泄露(oom)发生OOM的条件如何避免OOM内存三大问题: 内存抖动:内存抖动会造成图形呈锯齿状,GC导致App卡顿 内存泄露:在当前用的周期呢不在使用的对象被GC roots引用,导致内存不能被回收,使实际可使用内存变小 内存溢出:即OOM,OOM时会导致程序异常。Android设备出厂以后,java虚拟机对单个应用的最大内存分配就确定下来了,超出这个值就会OOM。 内存泄露(oom)OOM(OutOfMemoryError.
2021-01-12 20:01:11
154
原创 Android 内存优化与OOM(2)-低内存杀进程机制
进程在大多数情况下,每个 Android 应用都在各自的 Linux(VM虚拟机) 进程中运行。当需要运行应用的一些代码时,系统会为应用创建此进程,并使其保持运行,直到不再需要它且系统需要回收其内存以供其他应用使用。Android进程分类(官方) 前台进程 可见进程 服务进程 缓存进程 1、前台进程用户目前正在执行的操作所需的进程。在不同请跨下,进程可能因为其所包含的各种以用组件被视为前台进程。如果满足下面的任意一条条件,则该进程就会被认为前台进程:它
2021-01-12 19:29:27
468
原创 Android 内存优化与OOM(1)-内存的管理和回收
Android OOM与内存优化(1)app 发生OOM的原因 Android 给每个 App 分配一个 VM ,让App运行在 dalvik 上,这样即使 App 崩溃也不会影响到系统。系 统给 VM 分配了一定的内存大小, App 可以申请使用的内存大小不能超过此硬性逻辑限制,就算物理内 存富余,如果应用超出 VM 最大内存,就会出现内存溢出 crash 。 由程序控制操作的内存空间在 heap 上,分 java heapsize 和 native heapsiz...
2021-01-12 17:45:11
233
1
原创 Android基础篇-Java 泛型
1、什么是泛型 泛型是jdk5中引入的一个新特性,泛型提供了编译时的类型安全检查机制,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,泛型不存在于Java虚拟机中,java泛型是一个伪泛型。2、泛型种类 泛型类 通用的泛型类定义格式如下:class name<T1, T2, ..., Tn>其中T1,T2..是类型参...
2020-06-03 15:11:10
178
原创 解决华为手机调用系统相册返回值是null的问题
在开发项目中需要调用系统相册,在别的android 手机上能正常的获取到返回值,但是在华为上却是返回值为null,下面请看代码 Intent imgIntent = new Intent(Intent.ACTION_PICK, null); imgIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "ima...
2018-08-09 14:45:15
2290
2
原创 getApplicationContext与getBaseContext以及activity.this的区别
在Android开发中我们常常能看见一些方法体中有context参数。这个context意思就是上下问的意思。在使用时如果我们使用的是getApplicationContext 那么对应着整个应用的生命周期,若应用销毁 context随着销毁。而Activity.this得到的上下文对应着Activity的生命周期,随着activty的生命周期。getBaseContext则是返回函数特定的上...
2018-04-23 17:01:05
1490
原创 Android 6.0后所必须的运行时权限申请的常用权限集合及使用方法
关于运行时权限在旧的权限管理系统中,权限仅仅在App安装时询问用户一次,用户同意了这些权限App才能被安装(某些深度定制系统另说),App一旦安装后就可以偷偷的做一些不为人知的事情了。在Android6.0开始,App可以直接安装,App在运行时一个一个询问用户授予权限,系统会弹出一个对话框让用户选择是否授权某个权限给App(这个Dialog不能由开发者定制),当App需要用户授予不恰当的...
2018-03-06 16:58:44
1452
原创 android沉浸式状态栏实现
android手机中如何实现想ios一样的沉浸式状态栏效果?下面我来为大家全面的分析下实现的代码,首先看下沉浸式状态栏的效果。 图1 图2 图3 沉浸式状态栏在and
2017-10-20 15:51:28
414
转载 完美解决VedioView加载视屏黑一下的问题
在app中需要使用vedioview来加载本地的视屏,但是会发现在播放视屏前会黑一下(时间的长短,取决于手机加载资源的速度),这样在给用户使用app的时候,体验效果非常的差。 首先来看一下为什么会出现黑屏的现象。视频本地播放前短暂黑屏,是由于VideoView加载资源需要一定的耗时,视频加载到视频渲染到屏幕这个过程也是需要时间的。如何避免播放前的黑屏现象呢,下面就通过一些方法来尝试
2017-09-12 10:06:39
4310
原创 android 流式布局(热门标签)
热门标签(流式布局) 在当前主流标签中都有热门选项,经过本人参考网上的写法并加入自己的理解实现了流式布局的使用,方便简单。 通过继承ViewGroup 计算每个view 的宽高,时间自动换行的功能。效果图: 代码如下:1、流式布局 public class FlowLayout extends ViewGroup{ //存储所有
2017-09-08 13:57:40
423
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人