【问题标题】:Restart native app after crash崩溃后重新启动本机应用程序
【发布时间】:2016-08-31 07:45:53
【问题描述】:

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

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

【问题讨论】:

    标签: android nativeapplication


    【解决方案1】:

    ActivityManagerService 重启原生应用。

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

    (logcat -b events).
    

    更多信息:

    如果您看到ActivityManagerService.finishForceStopPackageLocked() 方法的代码,则此方法会触发带有动作Intent.ACTION_PACKAGE_RESTARTED 的Intent。

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

    所以在内部有一个在ActivityManagerService 中实现的PackageDataObserver,它会观察是否删除了任何包,如果需要重新启动它,则会使用Intent.ACTION_PACKAGE_RESTARTED 操作触发意图

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

    希望它能消除疑虑。

    【讨论】:

    • 对不起,我从 logcat 中什么也没看到,我只看到 /system/bin/mediaserver 崩溃,但我没有看到使用另一个 pid 重新启动 mediaserver
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多