上次活动被销毁时,Android应用程序类不会被销毁

时间:2014-02-01 01:36:08

标签: android android-lifecycle

第二次运行应用程序时,不会调用Application Class的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)上测试

1 个答案:

答案 0 :(得分:5)

应用程序还可以包含服务,内容提供商,内容观察者等。因此,重要的是不要将应用程序生命周期与活动联系起来。如果操作系统需要释放资源,应用程序可能会被隐藏。但总的来说,你不能对实际发生的时间做出任何假设。

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

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

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