Android Framework 05---Zygote进程详解

Android Framework 05---Zygote进程详解,第1张

init进程作用:

添加到init.rc脚本中,然后自编译系统。

app_process进程!!!

首先要求对一对多,所有只能考虑Binder或者Socket.

1.zygote比service manager先启动,从这个意义上,他没有service manager可以注册,所以没法用binder.

2.zygote和service manager都是init进程启动的,就算先启动service manager,也不能保证zygote起来的时候service manager就已经初始化好了(这就需要额外的同步,太麻烦)。

3.这个sorcket的所有者是root,group是system,只有系统权限的用户才能读写,这又多了一层安全保障。

4.zygote是通过fork生成进程的,而多线程是不允许使用fork,可能造成死锁,同时binder又是多线程的,所以干脆不同binder而使用socket.

zygote进程的作用:

管理,包解析,结果缓存,提供查询接口。

得到如下:

AMS缓存中心:ActivityThread

Activity在应用端由ActivityClientRecord负责描述其生命周期的过程与状态,但最终这些过程与状态是由ActivityManagerService(以下简称AMS)来管理和控制的

描述了应用进程的BroadcastReceiver,由BroadcastQueue负责管理。

描述了Service服务组件,由ActiveServices负责管理。

描述ContentProvider内容提供者,由ProviderMap管理。

用于描述Activity,由ActivityStackSupervisor进行管理。

manifest.xml 添加权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

问题Main.log:

FATAL EXCEPTION: main

Process: com.android.phone, PID: 761

android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@1cb8bd0 is not validis your activity running?

at android.view.ViewRootImpl.setView(ViewRootImpl.java:562)

at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:282)

at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)

at android.app.Dialog.show(Dialog.java:298)

at android.preference.DialogPreference.showDialog(DialogPreference.java:316)

at com.android.settings.EditPinPreference.showDialog(EditPinPreference.java:103)

at com.android.settings.IccLockSettings.handleGetRemainTimesResponse(IccLockSettings.java:174)

at com.android.settings.IccLockSettings.access$300(IccLockSettings.java:71)

at com.android.settings.IccLockSettings$1.handleMessage(IccLockSettings.java:156)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:135)

at android.app.ActivityThread.main(ActivityThread.java:5345)

at java.lang.reflect.Method.invoke(Native Method)

at java.lang.reflect.Method.invoke(Method.java:372)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:947)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:742)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/bake/11447832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存