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

问题描述 投票:0回答:3

据我所知,从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(),是否有办法区分删除案例和其中两个被调用的案例?

android android-service android-lifecycle
3个回答
1
投票

当你打开最近的应用程序onPauseonStop被调用时,所以当你的活动被刷掉时,只有onDestroy留在生命周期中。

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

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

根据documentation

如果服务在其进程消失后重新启动,则它可能为null,并且之前已返回除START_STICKY_COMPATIBILITY之外的任何内容。


1
投票

与onDestroy()一样,甚至没有提到服务,必须有其他东西试图访问不再存在的服务。知道它可能是什么?

在某些手机中,当应用程序从最近的应用程序中删除时,就像设置并强制关闭应用程序一样。所以它关闭了与应用程序相关的所有服务。这就是你遇到这样的问题的原因。

如果同时调用onPause()和/或onStop(),有没有办法区分删除案例和调用这两个案例的其他情况?

只要我知道没有办法区分删除案例。

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

为了解决这个问题,您可以查看Ge3ng发布的内容。它会解决你的问题。


0
投票

你有一个ServiceSTART_STICKY返回onStartCommand()。当您从最近的任务列表中滑动任务时,Android会杀死托管您的活动的操作系统进程和您的Service

既然你告诉Android(通过START_STICKY)你希望你的Service在Android杀死它的情况下重新启动,Android会遵守你的请求并重新启动你的Service。当它这样做时,它用onStartCommand() null调用Intent

注意:我认为你的活动根本没有调用onDestroy()。您可以添加日志记录到onDestroy()以查看是否为真。

© www.soinside.com 2019 - 2024. All rights reserved.