崩溃恢复android应用程序

崩溃恢复android应用程序,android,android-service,Android,Android Service,我正在开发一个应用程序,我想加入一个崩溃恢复功能,重新启动我的应用程序。我没有写任何与此相关的代码。 我的想法是启动一个监控状态的服务。基于这种方法,问题是因为服务是从我的应用程序启动的,如果应用程序死掉,它就会死掉。 是否可以从我的应用程序启动服务并独立运行,以监视我的应用程序并重新启动它?当手机启动时,您可以通过向action android.intent.action.BOOT_注册intent筛选器来启动服务。更多信息可以在类似的中找到,有几种方法可以解决您描述的问题。也许最简单的方法是

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

当手机启动时,您可以通过向action android.intent.action.BOOT_注册intent筛选器来启动服务。更多信息可以在类似的

中找到,有几种方法可以解决您描述的问题。也许最简单的方法是为您的项目提供一个自定义应用程序类,并在其onCreate方法中调用Thread.setDefaultUncaughtExceptionHandlerthis;将类指定为默认异常处理程序。这将要求您覆盖public void uncaughtExceptionThread t,Throwable e,它将在崩溃时被调用,您可以计划重新启动

如果您确实想要流程之外的东西来监控,一种方法是在您的应用程序中定义一个具有自己流程的服务;这是通过AndroidManifest属性完成的


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

它与运行服务相关,该服务将检查应用程序的状态。为什么AlarmManager比服务更好?应用程序中可能有多个线程。我没有说AlarmManager比服务更好,我说这是另一种选择。但是,由于应用程序可以在不破坏挂起的警报的情况下崩溃,所以更好。但更重要的是,问题不是如何启动BOOT_COMPLETED就是答案的服务,而是关于可能性的问题。您的答案假设他希望在设备启动时启动某些东西,但他从未说过。他只表示希望应用程序崩溃恢复;BOOT_COMPLETED建议使用寿命比它应该使用的长得多的东西,浪费资源,降低人们的手机速度。Mah是对的。启动完成后,我不会启动服务。它在我的应用程序启动后立即启动。这是不必要的,因为任何其他应用程序都会使用这项服务,只有我的。好吧,你是对的,我认为最后一句话“如何启动服务”中有重音。我之所以建议“BOOT_COMPLETED”,是因为使用it服务可以独立于应用程序启动,并在应用程序崩溃时继续运行。也感谢marwinXXII的回复。如果我的应用程序已计划好,AlarmManager可能是一个解决方案。使用Thread.setDefaultUncaughtExceptionHandler,如果我将异常处理集中在一个位置,则可以使用它。为我使用服务是个好主意:我发现这很有用。但我真的很喜欢听其他的方法。在您的用例中使用AlarmManager会是这样的:当您的应用程序启动时,您会安排一个具有一定延迟的警报。当警报触发时,您可以验证应用程序是否正在运行,或者根据需要重新启动它,还可以重新安排下一个警报。当应用程序正常终止时,您将删除当前警报。此用例只在应用程序启动时启动,并在应用程序完成后立即停止,因此适合您的非计划模型。