是否有必要在完成调用之前设置内容视图?

Is it necessary to setContentView before finish called?

如果来自 SharedPreferences 的 isLoggedIn 为真,我将我的应用程序发送到另一个 activity,但是当我重新启动我的应用程序时,它会转到主 activity 非常好但是当我按下后退按钮时它停止工作为什么?

SharedPreferences=getSharedPreferences(getString(R.string.Prefereces_file_name), Context.MODE_PRIVATE)

    val isloggedIn=SharedPreferences.getBoolean("isLoggedIn",false)

    if (isloggedIn){
        val intent=Intent(this@LoginActivity,MainActivity::class.java)
        startActivity(intent)
        finish()
    }else{
        setContentView(R.layout.activity_login)
    }

你可以在onCreate中自由call finish()而不调用一些额外的方法,例如:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); //REQUIRED

    val isloggedIn=SharedPreferences.getBoolean("isLoggedIn",false)

    if (isloggedIn){
       val intent=Intent(this@LoginActivity,MainActivity::class.java)
       startActivity(intent)
       finish()
    }else{
       setContentView(R.layout.activity_login)
    }
}

并且当你调用 finish 时它不会停止执行该方法,所以确保 finish() 行下面没有任何内容。

并且你不应该调用 setContentView 如果你将在 onCreate 中调用 finish 到 save memory/speed.

我测试过这种方法,效果很好。

后退按钮点击:

override the onBackPressed() method into your Activity like this way

public void onBackPressed(){
     // do something here and don't write super.onBackPressed()
}

覆盖 onKeyDown() 方法

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch(keyCode){
    case KeyEvent.KEYCODE_BACK:
        // do something here 
        return true;
    }
    return super.onKeyDown(keyCode, event);
}