Android:onDestroy()或Application类中的类似方法

May*_*ius 67 android android-lifecycle

我正在扩展Application类以使用一些需要上下文的全局变量.我知道Application类中的onCreate()方法在活动中的任何其他onCreate()之前被调用,但是我想知道Application类中是否有onDestroy()或类似方法可以被覆盖以便我能够将变量存储在持久性内存中,取消注册侦听器并在应用程序进程被杀之前将最后一条消息发送到服务器吗?如果没有,还有其他办法吗?

Rag*_*ood 29

Application类的生产设备上没有这样的回调.

您想要做的事情通常应该在更改后立即完成,或者在onPause()相应的应用程序组件中完成.


Dal*_*mas 7

在android中,没有关闭应用程序的概念.用户离开:这是您将意识到的唯一事件(onPause()在活动中).您应该调整您的应用程序设计以适应此生命周期.

您不应该尝试找到一种解决方法,它可能会让事情变得更糟:如果用户电量耗尽,或者您的应用程序崩溃了怎么办?所有数据都将丢失.我不知道您正在使用哪种数据,但这通常会导致Google Play评分不佳.即使发生了一些不好的事情,所有的数据都应该已经保存了(AsyncTasks对于这个很好,不要害怕在每次更改时启动一个以不断保存数据).


小智 6

首先:我是一个绝对的初学者

\n\n

当我的应用程序退出时,我需要执行一些代码(是的,我不知道 Android 中没有这样的事情),这对我来说没问题:

\n\n

-我有 MyApplication 扩展了应用程序。作为 MyApplication 的成员,有一个名为 activeActivitiesNumber 的 AtomicInteger 字段和一个公共 getter 方法。

\n\n

-所有应用程序活动都扩展MyActivy(它本身扩展Activity)

\n\n

-MyActivity 重写 onCreate、onResume 和 onStop 方法,并且还有一个受保护的字段:\nProtected MyAppication mAppState;

\n\n
a) OnCreate(){\nsuper.onCreate();\nmAppState=this.getApplication();...}\n\n\nb) onResume(){\nsuper.OnResume();\nmyAppState.getactiveActivitiesNumber().addAndGet(1)\n....}\n\nc) onStop(){\nsuper.onStop()\n\nif (myAppStatemyAppState.getactiveActivitiesNumber()..decrementAndGet()<1){\n...call exiting code (for instance a public method defined in MyApplication}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

它有一个问题:如果您启动任何不属于您的应用程序的活动(例如发送电子邮件),它将触发退出方法。

\n\n

另一个问题(不知道它是否是真实的或理论上的)是不能保证在某些情况下 onStop 会被调用。

\n\n

希望这有帮助。

\n


dzi*_*kyy 5

您可以覆盖onDestroy()Activity,这将是最后一次在你的应用程序关闭,并检查是否的整理。在这种情况下,不会在设备旋转时调用您的代码。但是您应该知道,onDestroy()当通过设备主页按钮关闭应用程序时不会调用它。

@Override
public void onDestroy(){
    super.onDestroy();
    if(isFinishing()){
        //do your stuff here
    }
}
Run Code Online (Sandbox Code Playgroud)