一、Handler机制:
- 由于Android主线程做耗时操作超过5秒没有响应会产生ANR,所以 Android发布了一套更新UI的机制,我们通常称之为Handler机制
- Handler机制中分为,Thread、Handler、Message、Message Queue和Looper
- Handler机制的流程为Thread处理耗时逻辑,把处理结果通过message传递给Handler,Handler在构造方法中通过Looper.myLooper()获取到对应的Looper,然后通过Looper来确定把Message放置在哪个Message Queue中,然后通过Looper循环把Message取出更新到对应的线程中。
- Message Queue遵循先进先出原则
- 我们自己穿件的线程,默认是没有消息队列(Message Queue)和消息循环(Looper)的,想要让一个线程具有消息处理机制,我们需要在线程中先调用Looper.perapre()来创建一个Looper对象,然后调用Looper.loope()进入消息循环。
- 当我们创建了Handler对象时,指定Handler与哪个具有Looper的线程关联,这个线程就成了目标线程
二、Android 性能优化:
- Android性能优化分为:App启动优化、响应优化、布局优化、内存优化、省电优化、网络优化
- App启动优化:Android程序启动分为:热启动、温启动和冷启动。启动优化针对的就是冷启动,其中冷启动涉及的一个是Application的OnCreate()方法,另外一个就是首屏Activity的渲染
- 响应优化:Android 产生ANR的情况为:Activity超过5秒无响应、BroadcastReceiver超过10秒无响应、Service超过20秒无响应
- 布局优化:布局中尽量减少嵌套关系,这里有一个工具H-Viewer可以看到布局的嵌套关系
- 内存优化:内存优化有分为三个问题:
问题一:GC优化,这里要注意的就是使用过的资源要及时进行回收,这里就要灵活运用强引用、软引用和弱引用
问题二:图片优化,由于Android虚拟机一般内存只有16-32M的内存,而高清图片一张就要占4-5M,如果不对图片进行处理,那么很容易就会产生OOM,在使用图片的时候要对图片进行必要的压缩
问题三:在自定义控件的时候,要尽量避免重复绘制,在onDraw()方法中尽量避免创建变量(推荐测试工具为手机开发者选项中的 调试GPU过度绘制)- 省电优化:Android中耗电最多的三个功能为:手机屏幕、手机网络、GPS。这里我们要考虑的主要是手机网络和GPS。在写项目的时候,要尽量少的进行网络请求,在GPS功能使用结束后,最好把GPS功能关闭。(推荐工具:wakelock)
- 网络优化: Android网络优化推荐工具为Android Studio内置的Monitor,其中主要包括两个优化方向:
问题一:当处理图片的时候,最好和后台协商好几种尺寸的图片,在进行网络请求的时候,把对应的尺寸当作参数传递
问题二:在Wifi网络下,要进行一定的缓存策略,这样在4G网络和无网络的时候客户体验会更好些。
=========================================================================================
基础组件篇
横竖屏切换时Activity的生命周期变化?
1.如果自己没有配置android:ConfigChanges,这时默认让系统处理,就会重建Activity,此时Activity的生命周期会走一遍。
onSaveInstanceState() 与onRestoreIntanceState()
资源相关的系统配置发生改变或者资源不足:例如屏幕旋转,当前Activity会销毁,并且在onStop之前回调onSaveInstanceState保存数据,在重新创建Activity的时候在onStart之后回调onRestoreInstanceState。其中Bundle数据会传到onCreate(不一定有数据)和onRestoreInstanceState(一定有数据)。 用户或者程序员主动去销毁一个Activity的时候不会回调,其他情况都会调用,来保存界面信息。如代码中finish()或用户按下back,不会回调。
2.如果设置 android:configChanges="orientation|keyboardHidden|screenSize">
,此时Activity的生命周期不会重走一遍,Activity不会重建,只会回调onConfigurationChanged方法。
如何保证Service不被杀死?
-
提供进程优先级,降低进程被杀死的概率 方法一:监控手机锁屏解锁事件,在屏幕