2016-09-26 84 views
2

在我的Android应用程序中,我执行少量资源密集型操作。我必须在应用程序被杀之前随时关闭/清除这些内容。据我所知onStop()/onDestroy()生命周期方法不保证在杀死应用程序期间执行。因此,在这些方法中进行关闭/清理操作是不可靠的。 Android为实现此功能提供了哪些最佳选择?谢谢。在杀死应用程序之前执行强制性清理操作

+1

您可以使用'finally'块关闭您的资源。 – Rustam

+0

在哪个生命周期方法中放置'finally'块? – Omkar

+0

https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html – user1506104

回答

1

您应该使用而不是onStop, onDestroy。这是保证被称为。

1

我的建议是在你的主要活动上重写onDestroy()以在应用程序被销毁时执行代码,或者在用户退出应用程序时使用onStop()来执行代码。

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

另一方面onStop()在用户不再可见活动时调用。这可能是因为它正在被销毁,或者因为另一个活动已被恢复。如果活动返回与用户交互,或者如果此活动正在消失,则由onDestroy()继承,则可能由onRestart()跟随。

@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 
} 
+0

'onStop()'和'onDestroy'不保证运行到最后。他们可能只执行部分方法。杀死该应用程序后,Android应用程序进程可能随时终止。 – Omkar

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

相关问题