【问题标题】:Crash Recovery android app崩溃恢复安卓应用
【发布时间】:2012-09-21 23:06:38
【问题描述】:

我正在开发一个应用程序,我想添加一个崩溃恢复功能,重新启动我的应用程序。我没有写任何与此相关的代码。 我的想法是启动一个监控状态的服务。基于这种方法,问题是因为服务是从我的应用程序启动的,如果应用程序死了,它就会死。 是否可以从我的应用启动服务并独立运行以监控我的应用并重新启动它?

【问题讨论】:

    标签: android android-service


    【解决方案1】:

    有几种方法可以解决您描述的问题。也许最简单的方法是为您的项目提供一个自定义的 Application 类,并在其 onCreate() 方法中调用 Thread.setDefaultUncaughtExceptionHandler(this); 将您的类指定为默认异常处理程序。这将要求您覆盖将在您崩溃时调用的public void uncaughtException(Thread t, Throwable e),并且您可以安排重新启动。

    如果你真的想要在你的进程之外监控一些东西,一种方法是在你的应用程序中定义一个服务,它被定义为有自己的进程;这是通过 AndroidManifest 属性完成的。

    另一个选择是使用 Android AlarmManager,因为它由系统处理并可以重新启动您的应用程序。

    【讨论】:

    • AlarmManager 我相信如果我的应用程序已安排好,这可能是一个解决方案。如果我将异常处理集中在一个地方,我可以使用 Thread.setDefaultUncaughtExceptionHandler。对我来说使用服务是个好主意:我发现这个link 很有用。但我真的很想听听其他方法。
    • 在您的用例中使用 AlarmManager 类似于:当您的应用程序启动时,您会延迟一些时间安排警报。当该警报触发时,您验证应用程序正在运行(或在需要时重新启动它),并重新安排下一个警报。当您的应用程序正常终止时,您将删除当前警报。此用例适合您的计划外模型,仅在应用启动时启动,并在应用完成后立即停止(因为您将其停止)。
    【解决方案2】:

    您可以在手机启动时通过使用操作android.intent.action.BOOT_COMPLETED 注册意图过滤器来启动您的服务。更多信息可以在here 或类似的question 中找到

    【讨论】:

    • 它与运行服务有关,它将检查应用程序的状态。为什么 AlarmManager 比 Service 更好?并且应用程序中可能有多个线程
    • 我并没有说 AlarmManager 比服务更好,我说这是另一种选择——但是由于应用程序可以在不破坏挂起警报的情况下崩溃,所以它更好。更重要的是,所问的问题不是如何启动这样的服务(BOOT_COMPLETED 是一个答案),而是关于可能性。您的回答假设他希望在设备启动时启动某些东西,他从未说过。他只说他想要应用程序崩溃恢复; BOOT_COMPLETED 建议寿命比应有的长得多,浪费资源并减慢人们的手机速度。
    • 马是对的。启动完成后我不会启动我的服务。它在我的应用程序启动后立即启动。这是不必要的,因为任何其他应用程序都会使用该服务,只是我的。
    • 好吧,你说得对,我以为最后一句“如何启动服务”有重音。我建议“BOOT_COMPLETED”只是因为使用它服务可以独立于应用程序启动并在崩溃时继续运行。
    • 也感谢 marwinXXII 的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多