繁体   English   中英

单击“返回”时Android应用程序未正确关闭

[英]Android App Not Closing Properly When Clicking Back

邮政已被编辑

我已经将Android应用程序编程为实践项目以用于学习目的。 我遇到一个问题,当我在访问设置活动并在那里进行更改(复选框选项)后按下主活动上的后退按钮时,它会返回到设置活动。 如果在设置活动中没有进行任何更改,我将返回主活动并再次按回,它会退出。 如果我访问任何其他活动,然后返回主要,再次按回来,只需点击一下即可。

您将在下面看到设置活动和主要活动的后退按钮代码。

user_settings_activity.java(设置活动):

// When the back button is pressed, it goes back to the previous screen.
@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

User_Options.java(主要活动):

// When the back button is clicked, the user is asked if they want to close the app window or not.
@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

请告知我所需的任何其他代码。

任何帮助解决方案的帮助将不胜感激。

谢谢。

首先,感谢所有坚持这个问题的人提供回复和评论。 我感谢大家的帮助。 现在经过一些修补,我终于设法解决了问题。 代码如下。

设置活动:

// For the go back button.
public void go_back_butt(View v){
    // Goes to main activity.
    Intent main_activity = new Intent(getApplicationContext(), User_Options.class);
    main_activity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    main_activity.putExtra("EXIT", true);
    startActivity(main_activity);

    finish();
}

// When the back button is pressed, it goes back to the previous screen.
@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

主要活动:

// When the back button is clicked, the user is asked if they want to close the app window or not.
@Override
public void onBackPressed() {
    super.onBackPressed();

    if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
    }

    android.os.Process.killProcess(android.os.Process.myPid());
}

说明:

正如@chichiangho所说,我需要深入了解堆栈。 由于我对这些事情的了解有限,但我设法弄清楚,由于某种原因,设置活动没有像我最初的理论那样正确关闭。 所以这让我想知道如何在保存我保存的设置的同时正确处理这个问题。

感谢@kevz和@MFP回复,我能够创建一个解决方案。 我实现了一个“返回”按钮(参见代码)并在主要活动上使用kill进程以确保应用程序“正确退出”。 我还将设置活动的意图传递给主要活动,以确保完成finish()过程。

感谢所有参与的人,并花时间发布你的有用的回复,让我更多地考虑开箱即用,同时学习关于android app dev的新东西=)。

覆盖Activity中的onBackPressed函数

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

}

@Override
public void onBackPressed() {
    super.onBackPressed();
    // Call  finish() function here
    finish();
}

您可以使用以下代码退出应用程序。

@Override
public void onBackPressed() {
    super.onBackPressed();
    ActivityCompat.finishAffinity(MainActivity.this);
    android.os.Process.killProcess(android.os.Process.myPid()); 
}

用这个 ..

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK))
    {
        finish();
    }
    return super.onKeyDown(keyCode, event);
}

按钮点击从MainActivity启动SettingActivity-

btnSecond.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(MainActivity.this, SettingActivity.class));
        }
});

启动SettingActivity后无需完成()MainActvity。

无需在SettingActivity中覆盖onKeyDown()或onBackPressed()。

无论你在设置活动中的wt变化,都不要覆盖任何上述方法,它会正常工作。

关闭SettingActivity时,请不要执行任何操作。

这是你的avtivity堆栈。

起初:MainActivity

启动SettingActivity:MainActivity-> SettingActivity

onBackPressed()启动MainActivity:MainActivity-> SettingActivity-> MainActivity

然后完成SettingActivity:MainActivity-> MainActivity

看,有两个MainActivities,我认为这就是为什么你的MainActivity看起来像重启。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM