在杀死app之前执行强制清理操作

时间:2016-09-26 06:23:23

标签: java android

在我的Android应用中,我执行了一些资源密集型操作。在应用程序被杀之前,我必须始终关闭/清理这些内容。据我所知,{@ 1}} / onStop()生命周期方法无法保证在杀死应用程序时执行。因此,将close / cleanup操作放在这些方法中是不值得信赖的。 Android为实现此功能提供了哪些最佳选择?感谢。

3 个答案:

答案 0 :(得分:1)

您应该使用onPause代替onStop, onDestroy。保证被称为。

答案 1 :(得分:1)

我建议在主活动上覆盖onDestroy()以在应用程序被销毁时执行代码,或者在用户退出应用程序时onStop()执行代码。

onDestroy()将在活动被销毁之前被调用。它可以被调用,因为活动正在完成(有人称为finish()),或者因为系统销毁活动实例以节省空间。可以使用isFinishing()方法区分这两种情况。

另一方面,

在活动不再对用户可见时调用onStop()。这可能是因为它正在被销毁,或者是因为另一个活动已经恢复。如果活动回来与用户交互,则由onRestart()关注,如果此活动消失,则由onDestroy()关注。

@Override
protected void onStop() {
    super.onStop();
    // The activity is no longer visible i.e is it stopped now
}

@Override
protected void onDestroy() {
    super.onDestroy();
    //It is about to destroyed
}

答案 2 :(得分:1)

如果在onCreate()方法中调用finish(),则不会调用

onPause()和onStop()。例如,如果您在onCreate()期间检测到错误并因此调用finish(),则可能会发生这种情况。但是,在这种情况下,您希望在onPause()和onStop()中执行的任何清理都不会被执行。

虽然onDestroy()是活动生命周期中的最后一个回调,但值得一提的是,这个回调可能并不总是被调用,不应该依赖它来破坏资源。最好在onStart()和onResume()中创建资源,并分别在onStop()和onPause中销毁它们。

有关活动生命周期的详细信息,请参阅Android开发人员指南。 https://developer.android.com/training/basics/activity-lifecycle/starting.html