据我所知,从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()
,是否有办法区分删除案例和其中两个被调用的案例?
当你打开最近的应用程序onPause
和onStop
被调用时,所以当你的活动被刷掉时,只有onDestroy
留在生命周期中。
对于您的异常,您的onStartCommand方法应具有以下签名
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int) : Int
如果服务在其进程消失后重新启动,则它可能为null,并且之前已返回除START_STICKY_COMPATIBILITY之外的任何内容。
与onDestroy()一样,甚至没有提到服务,必须有其他东西试图访问不再存在的服务。知道它可能是什么?
在某些手机中,当应用程序从最近的应用程序中删除时,就像设置并强制关闭应用程序一样。所以它关闭了与应用程序相关的所有服务。这就是你遇到这样的问题的原因。
如果同时调用onPause()和/或onStop(),有没有办法区分删除案例和调用这两个案例的其他情况?
只要我知道没有办法区分删除案例。
但是当我的应用程序从列表中删除时,我仍然会收到非法的参数异常
为了解决这个问题,您可以查看Ge3ng发布的内容。它会解决你的问题。
你有一个Service
从START_STICKY
返回onStartCommand()
。当您从最近的任务列表中滑动任务时,Android会杀死托管您的活动的操作系统进程和您的Service
。
既然你告诉Android(通过START_STICKY
)你希望你的Service
在Android杀死它的情况下重新启动,Android会遵守你的请求并重新启动你的Service
。当它这样做时,它用onStartCommand()
null
调用Intent
。
注意:我认为你的活动根本没有调用onDestroy()
。您可以添加日志记录到onDestroy()
以查看是否为真。