我有一个具有单个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

10-06 10:41
查看更多