第二次运行应用程序时,不会调用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)上测试
答案 0 :(得分:5)
应用程序还可以包含服务,内容提供商,内容观察者等。因此,重要的是不要将应用程序生命周期与活动联系起来。如果操作系统需要释放资源,应用程序可能会被隐藏。但总的来说,你不能对实际发生的时间做出任何假设。
保存/重新加载状态应该在您的Activity onCreate和onDestroy中发生。隐藏活动时唯一保证(例如使用后退按钮),然后调用Activity.onStop。
我建议阅读有关Activity生命周期的所有内容: Activity class documentation
修改强> 要直接解决您的问题,“在删除最后一个活动时,不应该销毁此类(应用程序)吗?”。答案是不。您可以信赖的唯一生命周期是您的活动生命周期。即使在这种情况下,Activity.onDestroy也不像你希望的那样可靠。按后退按钮隐藏活动只会保证调用Activity.onStop。 Application类甚至没有onDestroy方法。