执行的流程环节:
1.systemReady()
Launcher 启动流程
1.ActivityManagerService
2.ActivityTaskManagerService(activity 启动托管给 10.0)
3.RootActivityContainer(启动packageMaSer..判断谁符合Launcher 标准 转换intent )
上面的转化会getHomeIntent(符合launcher==CateGroyHome)
4.ActivityStarter 上面交由该管理进一步启动,并且检测清单文件是否存在等一系列判断
5.ActivityRecoder 服务端对activity 信息做映射存储
6.ActivityStack ActivityStackSupervisor 对activity进行栈管理
7.ProcessList 10.0 把activityMs 启动 进程的工作专业
8.ZygoteProcess 启动进程的信息 传递给zygote
启动:
ActivityTaskManagerService :startHomeOnAllDisplays()
---->RootActivityContainer:startHomeDisplays(调用pms 查询符合Launcher条件的Activity Intent)
---->ActivityStarter(startActivityUnchecked()) 清单文件校验,启动权限检查
---->ActivityStack (resumeTopActivityInnerLocked()) 启动新acidity前会把当前可见怼activity暂停 计算带启动的activity所属进程是否存在
---> ActivityStackSurperVisor(进程存在启动,不存在创建)
--->ActivityMService (startProcess) 委派给ProcessList 来负责创建进程
--->ProcessList(startProcessLocked)
final String entryPoint=‘android.app.ActivityThread’ 新进程的入口
ActivityThread:
1.attach
2.IActivityManager mgr=Activity.getService
mgr.attachApplication 向远程服务进程注册应用四大组件以及生命周期
3.ActivityTaskManager.getService().releaseSomeActivity() //oom监控
4.thread.bindApplication(sendMessage----) handBindApplication
5.makeApplication ...android.app.application
6.instrumention.makeapplication
7.AppcomponentFactory 去创建四大组建
8.mInstrumentation.callApplicationOncreate(app) application 启动
9.AMS===mAtmInternal.attachApplication() 启动之前已经加入任务栈的activity
10.ActivityStack
11.performLaunchActivity perResumeActivity
12.绘制的入口 HandlerResumeActivity
===handMessage() 去刷新信息
handlerResumeActivity
performResumeActivity
viewRootImpl.setView(1.checkThread 2.requestLayout)
AIDL:
定义好AIDL接口,服务端实现接口 客户端调用接口。
四个重要成员
IBinder 提供跨进程的能力 ,Interface 服务端暴露的接口
image.png
image.png
image.png上面 queryLocalInterface 去查询是不是在一个进程。不是一个进程就会调用代理方法。onTransact 根据code 反序列化数据
image.png服务端 通过IMyAidl.stub 这个类生成Binder 给客户端
客户端去调用方法 服务端实现方法。
image.png
代理去实现远端方法。mRemote
垃圾回收算法:
1.标记清除算法
2.复制算法
3.标记-整理算法:标记过程仍然与“标记-清 除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理 掉端边界以外的内存,
4.分代收集算法:一般是把Java堆分为新生代和老年代,这样就可以根据 各个年代的特点采用最适当的收集算法。在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那 就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。而老年代中因为对象存活率高、没有额外 空间对它进行分配担保,就必须使用“标记—清理”或者“标记—整理”算法来进行回收。
RecyclevView
- 1 不需要重新bindViewHolder
ArrayList<ViewHolder> mAttachedScrap
ArrayList<ViewHolder> mChangeScrap
- 2 可通过setItemCacheSize 调整 ,默认 2
ArrayList<ViewHolder> mCacheViews
- 3 自定义扩张缓存
ViewCacheExtension
- 4 根据viewType 存取ViewHolde
RecycledViewPool mRecyclerPool
image.png
网友评论