Activity启动过程:Activity通过-ContextImpl ->AMS->Activieservices->handle ->activitythread->handler->activity.oncreate()
ContentProvider 创建过程:AcitivityThread-AMS-ApplicationThread -ActivityThread-Application.create;其中ApplicationThread 是在AMS与ActivityThread 之间通信。
BroadcastReceiver 绑定过程:ContenxImpl ->AMS.registerReceiver(保存广播)->广播队列中
BroadcastReceiver 接收发送过程ContextImpl->AMS->Handler->BroadcastQueue->ApplicationThread->Handler处理;
Service启动过程:ContextImpl->AMS->ActiveServices->ApplicationThread->Handler->ActivityThread-启动。
AsynTask执行流程:execute中的执行过程onPreExecute——>Exceute(判断方法是立刻执行还是直接放入线程池中)-DoInbackgroud ->postResult(通过发送handle消息)->OnprocessUpate/finish;
AsynTask注意事项:
AsynTask对象必须在主线程中创建。
AsynTask必须在UI线程中执行。
一个AsynTask对象只能执行一次否则会报错。
在不同Android版本中对于AsynTask的执行方法也不一样,有同步执行的,也有串行的。为了兼容Android3.0最好使用exceuteOnExceutor方法。此方法只有Android3.0及以上的版本中可用
Android 性能优化:
1,布局优化:减少层级的嵌套、使用布局重用、减少使用性能低的控件如RelativeLayout、合理使用include ,merge标签。
2,绘制优化:在onDraw方法里面避免使用大量的操作,因为此方法在可能会被频繁的调用,另外减少些方法中耗时操作。
3,内存泄漏优化:静态变量的原因,单例模式导致的(例:广播注册与解注册成对出现),动画未停止导致的(界面退出后,在onDestroy中调用停止动画操作,如果不停止有虽界面看不到,但是有可能动画是一直播放的,最后导致ANR)