【问题标题】:Back Button press initiate onDestroy then onCreate again of same activity后退按钮按下启动 onDestroy 然后再次 onCreate 相同的活动
【发布时间】:2019-08-23 19:35:33
【问题描述】:

我有 2 个主要活动,登录和列表,它们使用 firebase 身份验证。经过几次登录和注销后,如果我按下后退按钮(在两个活动上都发生),相同的活动会重新加载(尽管我在它们之间进行意图时使用了 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();
    }
}

List Activity 大致相同,如果有人说需要它,我会添加它,因为它非常大...我使用身份验证状态侦听器并确保在用户单击注销按钮时调用完成

对于这两个活动,我想按下后退按钮并最小化应用程序,无论用户处于什么活动中。

【问题讨论】:

    标签: android firebase firebase-authentication


    【解决方案1】:

    我记得,如果你超载OnBackPressed(),你不需要打电话给finish()

    在这种情况下是合理的

    @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(); 中,然后第二次显式地调用它。

    【讨论】:

      【解决方案2】:

      试试这个,

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

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

      【讨论】:

      • 请add对你的回答做一些解释
      • 我也很想知道为什么会这样,moveTaskToBack 还有其他副作用吗?如果将任务向后移动,问题会消失还是只是隐藏症状?
      • 将包含此活动的任务移到活动堆栈的后面。活动在任务中的顺序不变。如果为 false,则仅当活动是任务的根时才有效;如果为真,它将适用于任务中的任何活动。如果任务被移动(或者它已经在后面),则返回 true,否则返回 false。 developer.android.com/reference/android/app/…
      • 谢谢,我最终用这个答案解决了这个问题,看起来有点“不干净”,但它完成了工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      相关资源
      最近更新 更多