在Android中关闭Singleton的正确方法

时间:2017-02-10 19:25:09

标签: android singleton android-lifecycle

我的应用程序有多个活动,第一个(主要)活动仅在应用程序终止时关闭。所有其他(次要)活动都显示在此之上。

此主要活动初始化Singleton类,该类应在应用程序的整个生命周期内运行。辅助活动使用此Singleton实例。

当应用程序关闭时,主要活动会处理Singleton实例的终止(需要一些步骤)并终止自身。

我是在主要活动的onDestroy方法上执行此操作,但是根据活动生命周期,已经发生了不可能调用的方法。

那么我的问题是如何正确处理Singleton的终止,需要在终止之前采取一些步骤。

使用onPause是行不通的,因为如果应用程序在显示辅助活动时关闭,则不会再次调用主要活动的onPause(因为它已被隐藏)。

谢谢!

1 个答案:

答案 0 :(得分:0)

您将无法知道系统是否强行将应用程序的 进程杀死。文档中的文字说明有时不会调用onDestroy()。它没有这样的保证。

从Android文档的this页面。

  

void onDestroy()在销毁活动之前执行任何最终清理。这可能是因为活动正在结束   (有人称之为finish(),或者因为系统是暂时的   销毁此活动实例以节省空间。您可以   使用isFinishing()方法区分这两种情况。

     

注意:不要指望将此方法称为保存地点   数据!例如,如果活动正在编辑内容中的数据   提供者,这些编辑应该在onPause()或   onSaveInstanceState(Bundle),不在这里。这种方法通常是   实现释放资源,如与线程相关联的线程   活动,以便被破坏的活动不会留下这样的东西   当其余的应用程序仍在运行时。 有   系统将简单地杀死活动的托管的情况   进程中没有调用此方法(或任何其他方法),所以它   不应该被用来做那些打算留下来的东西   过程消失后。

Take a look at this question also

如果您必须采取的 Singleton 的步骤正在执行类似于持久化的工作,那么您可以做的是拥有一个观察者模式,通知您的单身人员在相应的操作时采取这些必要的步骤发生在需要必须执行步骤的任何活动中。

Refer to CommonsWare Answer Here also

And also this page of Android documentation is useful to study