onDestroy()
方法。
"在某些情况下,系统将仅仅杀死活动的进程而不调用此方法"
https://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29
相反,您可以创建一个服务,该服务将在运行您的活动的任务被销毁时收到通知。public class ClosingService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
// Handle application closing
fireClosingNotification();
// Destroy the service
stopSelf();
}
}
在清单文件中(在 application 标签内但是在任何 activity 标签之外)声明/注册您的服务:
<service android:name=".services.ClosingService"
android:stopWithTask="false"/>
stopWithTask="false"
将导致在进程中从任务中移除时触发您的服务中的onTaskRemoved()
方法。stopSelf()
销毁服务之前,您可以运行您的关闭应用程序逻辑。android:enabled="true" android:exported="true"
它们是正确的吗? - Curioclass MusicPlayerApplication: Application() {
private val TAG = MusicPlayerApplication::class.java.simpleName
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
override fun onActivityPaused(activity: Activity?) {
}
override fun onActivityResumed(activity: Activity?) {
}
override fun onActivityStarted(activity: Activity?) {
}
override fun onActivityDestroyed(activity: Activity?) {
Log.d(TAG, "onActivityDestroyed: ")
val activityName = activity!!.localClassName
}
override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
}
override fun onActivityStopped(activity: Activity?) {
}
override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
}
})
}
}
AndroidManifest.xml
<application
android:name=".MusicPlayerApplication"
....
我已经使用logcat测试了这种方法,我的onDestory
没有被调用,但是回调中的onActivityDestroyed
每次我从RAM中杀死活动时都会被调用,但是this doc说当一个活动的onDestory
被调用时,onActivityDestroyed
将被调用,但似乎并没有发生。然而,我认为这种方法比使用服务更好。
onDestroy()
方法不会被调用,不要依赖于它。如果它被调用了,可以放心地使用它来进行一些清理工作,但是你的应用程序需要能够处理任何组件(Activity或Service)上onDestroy()
方法未被调用的情况。请注意,避免改变原意。 - CommonsWare