据我从this question和official reference和guide的了解,当我的应用程序从最近的应用程序列表中删除时,仅调用了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()
,是否有办法将清除案例与调用这两个案例的其他案例区分开?
答案 0 :(得分:1)
打开最近使用的应用时,将调用onPause
和onStop
,因此,当您的活动被清除时,生命周期中仅剩下onDestroy
。
对于您的异常,onStartCommand方法应具有以下签名
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int) : Int
如果服务在其处理后重新启动,则此字段可能为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>();
中,以查看是否正确。