Android应用程序中带有启动画面的活动重新启动和返回按钮的问题

3
我有一个带有启动画面的Android应用程序。
这个启动画面预加载数据,当完成后启动应用程序的主活动并结束(通过finish()调用)。
只要应用程序没有完全被终止,这就很有效。因此,我通常可以像往常一样在不同任务之间切换:当我从子活动离开应用程序并很快返回时,我将看到这个子活动。
现在,当我离开这个子活动并做一些其他事情一段时间后,这个应用程序进程不可避免地被操作系统终止。
到目前为止还没有问题。现在我希望Android能够恢复子活动的状态(如果数据没有预加载,它只需要更长时间或者不显示某些字体,但Android无法意识到我正在某个地方进行预加载),然而启动画面活动却被启动了。
所以我说,那好吧......启动画面活动毕竟是启动器/主要活动。现在,我真正不明白的是:
当我从新加载的启动画面按下返回按钮时,我将看到我之前离开应用程序时的子活动。我真的不明白这是为什么。显然,Android保存了子活动的状态(和它的历史堆栈)以便重新加载,但它选择启动启动画面活动,而不是重新加载子活动(我之前离开了任务),并将其置于活动堆栈的后面一步。
为什么会发生这种情况?
当进程没有被终止时,我可以回到离开的地方。当它被终止时,我就不能(但仍然恢复了整个应用程序的早期历史记录)。我知道Android在后一种情况下必须加载状态等等,但这不应该是一个问题,并且默认情况下自动执行(根据文档)。
附言:我没有做任何花哨的事情。默认的启动标志,没有覆盖状态恢复方法等。

1
尝试按照您的步骤操作... SubActivity -> 启动画面 <- SubActivity,离开应用程序,再回来,它会显示启动画面?我假设SubActivity中有一些逻辑显示了启动画面。重新加载时是否可能再次触发它? - Cheryl Simon
2个回答

2

嘿,试试这个方法,它对我有用。我们需要使用一个布尔标志,这样它就可以处理这个问题。当您在加载闪屏期间按下返回按钮时,它将停止该活动,因此自动重新加载问题将得到解决。希望对您有所帮助。

public class Main extends Activity {

    ImageView imageLogo;
    LinearLayout myLayout;
    private Thread splashTread;
    private boolean isBackPressed = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        splashTread = new Thread() {
            public void run() {
                try {
                    sleep(3000);
                    if (!isBackPressed) {

                        Intent myIntent = new Intent(
                                "src.SplashScreen.com.MENU");
                        startActivity(myIntent);

                    }

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                finally {

                    finish();

                }
            }

        };

        splashTread.start();

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            isBackPressed = true;
            finish();
        }
        return super.onKeyDown(keyCode, event);

    }

}

0

这是一个已知的Android问题,涉及两个应用程序实例。该问题已经在这里这里进行了官方追踪。

解决方法请点击这里


谢谢,这看起来确实像我遇到的问题。我会在有时间的时候尝试您的解决方法。再次感谢您。 - ixampal
是的,我还没有机会尝试你的解决方法,但我测试了一下它是否导致了我的问题。 - ixampal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接