在Android中的onBackPressed之后恢复时的空活动

时间:2014-05-18 19:02:09

标签: java android

我的Android应用程序出现了一个奇怪的问题。

我的应用如何运作:当我启动应用时,它会启动MainActivity。如果用户未登录,则启动LoginActivity,然后在MainActivity中调用完成。

现在,当启动LoginActivity时,我按下后退按钮即可关闭应用程序。当我再次打开应用程序时,它必须再次启动LoginActivity,但有时这不起作用(如8次中的1次)。如果它不起作用,应用程序只会显示一个空的活动。

当应用程序无法正确启动时(第二个打印屏幕),按钮/文本输入可以正常工作,但看起来它们只是隐藏或其他东西。因此,当我按下“注册”文本的位置时,它会将我带到RegisterActivity。

有人知道导致这种奇怪行为的原因吗?

这是应用程序正确启动时: Good launch

但有时会发生这种情况: Bad launch

MainActivity onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    initializeDataSources();

    if(usersDataSource.getCurrentUser() == null)
    {
        Intent LoginActivity = new Intent(getApplicationContext(), LoginActivity.class);
        LoginActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(LoginActivity);
        finish();
        return;
    }

    if(localServiceBinder == null)
        localServiceBinder = new LocalServiceBinder();

    bindLocalService();

    setContentView(R.layout.activity_main);
}

LoginActivity onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(localServiceBinder == null)
        localServiceBinder = new LocalServiceBinder();

    bindLocalService();

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_login);

    mUsernameView = (EditText) findViewById(R.id.username);
    mPasswordView = (EditText) findViewById(R.id.password);
    mSignInButton = (Button) findViewById(R.id.sign_in_button);
    mSignUpButton = (TextView) findViewById(R.id.sign_up_button);
}

1 个答案:

答案 0 :(得分:0)

将您的数据工作和登录活动调用移至onStart / onResume。 当onDestroy / onCreate在活动隐藏并再次显示时不调用时,您将获得“空”活动。 这时:if(usersDataSource.getCurrentUser() == null) 是的,这是:

if(localServiceBinder == null)
            localServiceBinder = new LocalServiceBinder();

bindLocalService();

setContentView(R.layout.activity_main);

成为案件的死代码:onPause - > onStop - > onStart - >的onResume 在你的活动的生命周期中。