带有启动画面重启的Android Activity和后退按钮之谜

时间:2010-11-08 18:04:20

标签: android android-activity splash-screen back

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

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

只要应用程序没有被完全杀死,这种方法就可以正常工作。因此,我通常可以像往常一样在不同的任务之间来回切换:当我从子活动中离开应用程序并在我将看到此子活动后立即返回。

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

到目前为止没问题。现在我希望Android,不知道我的预加载(如果数据没有预加载它只需要更长时间或不显示一些字体,但Android不能意识到我正在做预加载的事实),以恢复子活动来自捆绑。但是启动了启动画面活动。

所以,我说,那很好......然后启动画面活动是在所有启动器/主要活动之后。现在,我的实际秘密如下。

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

为什么会这样?

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

P.S。我没有做任何幻想。默认启动标志,没有覆盖状态恢复方法等。

2 个答案:

答案 0 :(得分: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);

    }

}

答案 1 :(得分:0)

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

解决方法是here