美文网首页
2020-09-28

2020-09-28

作者: 程序员阿兵 | 来源:发表于2020-09-28 16:13 被阅读0次
image.png

执行的流程环节:

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)

image.png

AIDL:

定义好AIDL接口,服务端实现接口 客户端调用接口。

四个重要成员

IBinder 提供跨进程的能力 ,Interface 服务端暴露的接口


image.png
image.png

上面 queryLocalInterface 去查询是不是在一个进程。不是一个进程就会调用代理方法。onTransact 根据code 反序列化数据

image.png

服务端 通过IMyAidl.stub 这个类生成Binder 给客户端

image.png

客户端去调用方法 服务端实现方法。


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

相关文章

网友评论

      本文标题:2020-09-28

      本文链接:https://www.haomeiwen.com/subject/gbfduktx.html