我有一个具有单个Activity(MainActivity)的Android应用程序。我也有一个静态变量(foo),需要使用MainActivity启动和停止它。 foo的生命周期必须匹配MainActivity的整个生命周期,而不是其可见生命周期或前台生命周期。这是基本要点:
static Foo foo;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
foo.start();
}
protected void onPause()
{
super.onPause();
if (isFinishing())
disposeFoo();
}
protected void onDestroy()
{
super.onDestroy();
disposeFoo();
}
private void disposeFoo()
{
if (foo.isRunning())
foo.stop();
}
我会不时地收到崩溃报告,内容是:Foo已在运行时启动。
我可以全天从应用启动器启动和停止MainActivity,并且不会发生此崩溃。据我所知,也没有人在MainActivity上调用startActivity。
是否预期会创建新的MainActivity实例并在同一应用程序中的所有旧实例上运行onDestroy之前先对其调用onCreate的行为?在什么情况下会发生这种情况?我应该使用其他模式来初始化库,数据库和其他单例对象吗?
最佳答案
如果某些其他具有更高优先级的应用程序(通常,如果它位于前台则是更高优先级)需要资源,则您的应用程序经常被杀死。这是由于具有相对有限的资源的移动设备的性质。您会发现它的静态变量一旦返回就可能为null,因此在Android中使用较长时间的静态变量是一个坏主意。
您应该将数据保存在更持久的位置。您可能会发现有关常规Data Storage的这篇文章很有用。这个问题也应该是相关的:Saving Android Activity state using Save Instance State