【问题标题】:Android Activity with splash screen restart and the back button mystery带有启动画面重启和后退按钮神秘的 Android Activity
【发布时间】:2010-11-08 18:04:20
【问题描述】:

我有一个带有启动画面的 Android 应用。

此初始屏幕预加载数据,完成后启动应用程序的主要活动并完成(通过 finish() 调用)。

只要应用程序没有被完全杀死,它就可以很好地工作。所以,我通常可以像往常一样在不同的任务之间来回切换:当我从一个子活动中离开应用程序并在我看到这个子活动后不久返回时。

现在,当我离开这个子活动并做一些其他事情时,这个应用程序进程不可避免地会被操作系统杀死。

目前没有问题。现在我希望 Android 不知道我的预加载(如果数据没有预加载,它只会花费更长的时间或不显示某些字体,但 Android 无法意识到我正在某处进行预加载的事实),以恢复子活动从一个捆绑包。然而,启动屏幕活动已启动。

所以,我说,那很好......启动屏幕活动毕竟是启动器/主要活动。现在,我真正的谜团如下。

当我从这个新加载的初始屏幕按下后退按钮时,我将看到我在应用程序被杀死之前离开应用程序的子活动。我真的不明白这个。显然,Android DID 保存了要重新加载的子活动的状态(及其历史堆栈),但它没有重新加载,而是选择启动启动屏幕,而这个子活动(我在它被杀死之前早些时候离开了任务)退一步活动堆栈。

为什么会这样?

当进程没有被终止时,我可以切换回我离开的地方。当它被杀死时,我不能(但仍然恢复了该应用程序的整个早期历史)。我知道在后一种情况下,Android 必须加载状态等,但这应该不是问题,默认情况下会自动执行(根据文档)。

附:我没有做任何花哨的事情。默认启动标志,无覆盖状态恢复方法等。

【问题讨论】:

  • 在这里尝试按照您的步骤... 子活动 -> 启动画面

标签: android android-activity splash-screen back


【解决方案1】:

嘿,试试这个它对我有用,我们必须采用一个布尔标志,所以它会处理这个问题,当你在加载初始屏幕期间按下后退按钮时,它会停止该活动,所以自动重新加载问题将解决希望它对你。

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);

    }

}

【讨论】:

    【解决方案2】:

    这是两个应用程序实例的已知 Android 问题。该问题已正式跟踪herehere

    解决方法是here

    【讨论】:

    • 谢谢,这看起来确实像我遇到的问题。当我找到一些时间时,我会尝试你的解决方法。再次,非常感谢。
    • 是的,我还没有机会尝试您的解决方法,但我测试了是否是那个问题导致了我的问题。
    猜你喜欢
    • 2013-01-17
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    相关资源
    最近更新 更多