应用退出并打开未按预期工作

时间:2018-02-22 16:36:22

标签: android android-activity android-lifecycle

我制作了一个包含3项活动的简单应用: 1.登录 2.评级 3.总结

登录活动允许Google登录。如果用户已登录,则启动评分活动。代码如下

Intent i = new Intent(Login.this, Rating.class);
startActivity(i);

这部分工作正常。现在在评级活动中,我检查用户是否已提交当天的评级。我使用SharedPreferences存储任何以前的评级信息。我还有一个在后端工作的节点API来记录评级。如果应用程序无法找到评级详细信息的本地SharedPreference,我会从API执行GET请求以进行交叉验证。如果当天有评级信息,则会打开摘要活动。

此外,我还通过按评级活动或摘要活动中的后退按钮添加了退出应用程序的功能。代码如下

@Override
    public void onBackPressed() {
        new AlertDialog.Builder(this)
                .setTitle("Exit")
                .setMessage("Are you sure?")
                .setPositiveButton("yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(Intent.ACTION_MAIN);
                        intent.addCategory(Intent.CATEGORY_HOME);
                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(intent);
                        finish();
                        System.gc();
                        System.exit(0);
                    }
                }).setNegativeButton("no", null).show();
    }

这里的问题是,当我点击后退按钮时,我成功退出了应用程序。但是下次我打开应用程序(没有从最近的应用程序清除它)时,应用程序会直接在评级活动中打开。它没有通过登录 - >的循环。检查用户登录 - >评分

现在我再按一下后退按钮退出。然后我再次打开应用程序。这次它经过了周期*登录 - >检查用户登录 - >评级。**

这仍在继续。每次我退出并打开时,循环都按预期运行。

编辑:我还有另外一个问题。在使用我的手机进行调试时,每次应用程序的2个实例都会在我的主屏幕中列出,并且名称和图标相同。这可能与问题有关吗?但是,在检查应用列表时,它只显示一个名称为的应用。

1 个答案:

答案 0 :(得分:0)

为什么不在正面按钮上调用finish()而不是声明意图?在活动中调用finish()会退出应用程序并终止它。

试试这个:

@Override
public void onBackPressed() {
    new AlertDialog.Builder(this)
            .setTitle("Exit")
            .setMessage("Are you sure?")
            .setPositiveButton("yes", new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            }).setNegativeButton("no", new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dismiss();
            }).show();
}