后退按钮按启动onDestroy,然后再次创建相同活动

时间:2019-04-02 12:57:37

标签: android firebase firebase-authentication

我有2个主要的活动,登录名和列表,它们使用firebase auth。在几次登录和注销后,如果我按下“后退”按钮(这两个活动都发生),则将重新加载相同的活动(尽管在它们之间进行意图时我使用finish())。

我尝试覆盖onBackButtonPressed,但没有任何效果。我在onCreate和onDestroy中打印了消息以确保它们被调用。

登录活动(仅相关内容)

public class LoginActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        Log.wtf("TESTING", "CREATED: " + getClass().getSimpleName() + " -- TASK ID: " + getTaskId());

        setAllOutlets();
        mAuth = FirebaseAuth.getInstance();



    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.wtf("TESTING", "DESTROYED: " + getClass().getSimpleName() + " -- TASK ID: " + getTaskId());
    }


    private void goToListActivity(){

        Intent listActivityIntent = new Intent(LoginActivity.this, com.technion.android.mylists.ListActivity.class);
        startActivity(listActivityIntent);
        finish();

    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        finish();
    }
}

列表活动大致相同,如果有人会说需要它,请添加它,因为它很大...我使用身份验证状态侦听器,并确保当用户单击注销按钮时即时通讯结束

对于这两项活动,无论用户正在进行什么活动,我都想按后退按钮并最小化该应用程序。

2 个答案:

答案 0 :(得分:1)

尝试一下

@Override
public void onBackPressed() {
     super.onBackPressed();
     finish();
     moveTaskToBack(true);
}

https://developer.android.com/reference/android/app/Activity.html#moveTaskToBack(boolean)

答案 1 :(得分:0)

我记得,如果finish()重载,您无需致电OnBackPressed()

在这种情况下,这是合理的

@Override
public void onBackPressed() {
    switch (behaviorOptionsGroup.getCheckedRadioButtonId()) {
        case R.id.finish:
            finish();
            return;
        case R.id.moveTaskToBack:
            moveTaskToBack(false);
            return;
        default:
            super.onBackPressed();
    }
}

我猜您是两次致电finish()。在super.onBackPressed();中输入一次,然后第二次显式显示,然后再调用。