Java 在终止应用程序之前执行强制清理操作

Java 在终止应用程序之前执行强制清理操作,java,android,Java,Android,在我的Android应用程序中,我很少执行资源密集型操作。在应用程序被终止之前,我必须始终关闭/清理这些。据我所知,onStop()/onDestroy()生命周期方法不保证在应用程序终止期间执行。因此,在这些方法中设置关闭/清理操作是不可信的。安卓系统提供的实现这一功能的最佳替代方案是什么?谢谢。您应该使用onPause而不是onStop,onDestroy。它保证会被调用。我建议您在主活动上重写onDestroy(),以便在应用程序被销毁时执行代码,或者在用户退出应用程序时重写onStop(

在我的Android应用程序中,我很少执行资源密集型操作。在应用程序被终止之前,我必须始终关闭/清理这些。据我所知,
onStop()
/
onDestroy()
生命周期方法不保证在应用程序终止期间执行。因此,在这些方法中设置关闭/清理操作是不可信的。安卓系统提供的实现这一功能的最佳替代方案是什么?谢谢。

您应该使用
onPause
而不是
onStop,onDestroy
。它保证会被调用。

我建议您在主活动上重写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
}
如果从onCreate()方法中调用finish(),则不会调用onPause()和onStop()。例如,如果您在onCreate()期间检测到错误并因此调用finish(),则可能会发生这种情况。但是,在这种情况下,您希望在onPause()和onStop()中完成的任何清理都不会执行

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

有关活动生命周期的更多信息,请参阅Android开发者指南。

您可以使用
finally
block关闭资源。在哪个生命周期方法中放置
finally
block?
onStop()
onstroy
不保证运行到最后。它们只能执行方法的一部分。关闭应用程序后,android应用程序进程可能随时终止。