从最近的应用程序列表中删除应用程序时,会调用哪些生命周期事件?

时间:2019-03-08 18:18:05

标签: android android-service android-lifecycle

据我从this questionofficial referenceguide的了解,当我的应用程序从最近的应用程序列表中删除时,仅调用了onDestroy()

>

在我的应用程序中,我有一个活动可以启动播放音乐的服务。在活动的onDestroy()中,甚至没有提到该服务,但是当我的应用程序从列表中删除并指向该服务时,仍然会抛出非法参数异常:

Parameter specified as non-null is null: 
method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter intent 
at com.example.soulfetch2.BordunService.onStartCommand(BordunService.kt)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3468)`

onDestroy()中一样,甚至没有提到该服务,必须有其他尝试访问该服务的东西。知道会是什么吗?

如果还调用了onPause()和/或onStop(),是否有办法将清除案例与调用这两个案例的其他案例区分开?

3 个答案:

答案 0 :(得分:1)

打开最近使用的应用时,将调用onPauseonStop,因此,当您的活动被清除时,生命周期中仅剩下onDestroy

对于您的异常,onStartCommand方法应具有以下签名

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int) : Int

按照documentation

  

如果服务在其处理后重新启动,则此字段可能为null   已经消失了,它以前返回了什么,除了   START_STICKY_COMPATIBILITY。

答案 1 :(得分:1)

  

与onDestroy()中一样,甚至没有提到该服务,必须有   其他尝试访问不存在的服务   不再。知道会是什么吗?

在某些手机中,当该应用程序从最近的应用程序中删除时,就像去设置并强制关闭该应用程序一样。因此它将关闭与该应用程序相关的所有服务。这就是为什么您遇到这样的问题。

  

如果还调用了onPause()和/或onStop(),有没有办法   将移除案例与其他两个案例区分开来   被称为?

只要我知道没有办法区分清除案件。

  

但是当我的应用程序运行时,仍然会抛出非法参数异常   从列表中删除

要解决此问题,您可以查看Ge3ng发布的内容。它将解决您的问题。

答案 2 :(得分:0)

您有一个Service,它从START_STICKY返回onStartCommand()。当您从近期任务列表中滑动任务时,Android会终止托管您的活动和Service的OS进程。

由于您(通过START_STICKY告诉Android,希望在Android杀死Service的情况下重新启动Service,因此Android会遵守您的请求并重新启动onStartCommand()。执行此操作时,它将使用null Intent调用onDestroy()

注意:我假设您的活动根本没有被onDestroy()调用。您可以将日志记录添加到services.AddTransiant<IDataRepository, DataRepo>(); 中,以查看是否正确。