【问题标题】:Android Application class not destroyed when last activity is destroyed销毁最后一个活动时未销毁Android应用程序类
【发布时间】:2014-02-01 01:36:07
【问题描述】:

第二次运行应用程序时,应用程序类的 onCreate 不会被调用。这是第一次。这可以通过使用 Android Studio 创建一个新应用程序,然后添加一个最小的单例应用程序类来重现:

package com.whatever.test;
import android.app.Application;
import android.content.Context;
import android.util.Log;

public class MyApp extends Application {
    private static MyApp singleton;

    public static MyApp getInstance(Context context) {
        Log.i("MyApp","---------->getinstance");
        return singleton;
    }

    @Override
    public void onCreate()
    {
        super.onCreate();
        singleton = this;
        Log.i("MyApp","---------->act oncreate");
    }
}

在活动中添加,在onCreate中:

MyApp myApp = MyApp.getInstance(this);
Log.i("MainActivity", "-------->onCreate");

在 onDestroy 中:

@Override
    public void onDestroy()
    {
        super.onDestroy();
        Log.i("MainActivity", "-->onDestroy");
    }

Manifest.xml 包含:

 android:name=".MyApp"

我在活动上按下后退按钮并看到 onDestroy 被调用,但这显然不足以删除 Application 类。如果我使用手机的应用程序管理器终止该应用程序并重新运行,我将再次看到 App onCreate 日志(但仅运行一次)。

当最后一个活动被移除时,这个类不应该被销毁吗?这是我的假设。当然,我读过有人说此类可以在应用程序运行时被销毁,因此您必须在应用程序生命周期中处理重新加载任何状态,但没有任何反映我的情况。

注意:在实体手机 (Galaxy S3) 上测试

【问题讨论】:

    标签: android android-lifecycle


    【解决方案1】:

    一个应用程序也可以有服务、内容提供者、内容观察者等等。所以不要将应用程序的生命周期绑定到一个活动是很重要的。如果操作系统需要释放资源,应用程序可能在隐藏时被销毁。但总的来说,您无法对何时真正发生这种情况做出任何假设。

    保存/重新加载状态应该发生在您的 Activity onCreate 和 onDestroy 中。当您的活动被隐藏(例如使用后退按钮)时,您拥有的唯一保证,然后调用 Activity.onStop。

    我建议阅读有关 Activity 生命周期的所有内容: Activity class documentation

    编辑: 为了直接解决您的问题,“当最后一个活动被删除时,这个类(应用程序)不应该被销毁吗?”。答案是不。您可以可靠地依赖的唯一生命周期是 Activity 的生命周期。即使在这种情况下,Activity.onDestroy 也没有您希望的那么可靠。按下后退按钮隐藏活动只会保证调用 Activity.onStop。 Application 类甚至没有 onDestroy 方法。

    【讨论】:

    • 感谢您的回答,但您的回答似乎侧重于活动,而我的问题是关于 Application 类。
    • 我正在引导您讨论活动,因为您对应用程序的理解不正确。
    • @DaneWhite 所以请尝试对 Application 类进行更多阐述,以便我们获得更多上下文。
    • 我认为按下后退按钮不会“隐藏”活动。它实际上破坏了活动。按主页按钮会将其隐藏(将其移至背景)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2012-01-14
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多