1

在android 4.4及以下,谁(/system/bin/*)在启动时加载一个native应用程序,我认为文件init.rc负责,对吗?

那么如果原生应用程序崩溃(例如/system/bin/mediaserver)它会自动重启,那么问题是:谁负责应用程序的重启?有文件吗?

4

1 回答 1

0

ActivityManagerService 重新启动本机应用程序。

在正常日志和/或事件日志中,logcat当应用程序重新启动时,通常会有一些喋喋不休activity manager service

(logcat -b events).

更多信息:

如果你看到ActivityManagerService.finishForceStopPackageLocked()方法的代码,这个方法会触发一个带有 action 的 Intent Intent.ACTION_PACKAGE_RESTARTED

它是从各种方法调用的,例如:
ActivityManagerService.forceStopPackage()
IPackageDataObserveronRemoveCompleted.onRemoveCompleted()

所以在内部有一个PackageDataObserver实现的 in ActivityManagerService,它观察是否有任何包被删除,如果它需要重新启动,一个意图被触发Intent.ACTION_PACKAGE_RESTARTED

并且每个包都被强制关闭ActivityManagerService.forceStopPackage(),它知道要重新启动哪个包。

希望它能消除疑虑。

于 2016-08-31T07:48:00.643 回答