第二次运行应用程序时,不会调用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");
}
}
Run Code Online (Sandbox Code Playgroud)
并在onCreate中添加活动:
MyApp myApp = MyApp.getInstance(this);
Log.i("MainActivity", "-------->onCreate");
Run Code Online (Sandbox Code Playgroud)
并在onDestroy中:
@Override
public void onDestroy()
{
super.onDestroy();
Log.i("MainActivity", "-->onDestroy");
}
Run Code Online (Sandbox Code Playgroud)
Manifest.xml包含:
android:name=".MyApp"
Run Code Online (Sandbox Code Playgroud)
我按下活动上的后退按钮并看到onDestroy被调用,但这显然不足以删除Application类.如果我使用手机的应用程序管理器终止应用程序并重新运行,我将再次看到App onCreate日志(但仅用于一次运行).
删除最后一个活动时,不应该销毁此类吗?这是我的假设.当然我读过这样的人说当应用程序运行时这个类可以被销毁,所以你必须在应用程序生命周期中处理重新加载任何状态,但没有任何反映我的场景.
注意:在物理手机上测试(Galaxy S3)
应用程序还可以包含服务,内容提供程序,内容观察程序等.因此,重要的是不要将应用程序生命周期与活动联系起来.如果操作系统需要释放资源,则应用程序可能会被隐藏.但总的来说,你不能对实际发生的时间做出任何假设.
保存/重新加载状态应该在您的Activity onCreate和onDestroy中发生.隐藏活动时的唯一保证(例如使用后退按钮),然后调用Activity.onStop.
我建议阅读有关Activity生命周期:活动类文档的所有内容
编辑: 要直接解决您的问题,"在删除最后一个活动时,不应该销毁此类(应用程序)吗?".答案是不.您可以信赖的唯一生命周期是您的活动生命周期.即使在这种情况下,Activity.onDestroy也不像你希望的那样可靠.按后退按钮隐藏活动只会保证调用Activity.onStop.Application类甚至没有onDestroy方法.