【问题标题】:Cannot finish Activity无法完成活动
【发布时间】:2014-10-03 05:23:17
【问题描述】:

在我的应用程序中,我有 5 个活动,不包括主要活动,我以循环方式重复使用其他 4 个活动。

在我的每个活动(主要除外)onPause() 方法中,我都编写了 Activityname.this.finish();

当我结束第 5 次活动的循环并返回主要活动时......

但我的问题是当我结束主要活动时......而不是关闭应用程序,它进入第三个活动。

我不知道问题到底出在哪里。可能在使用 db n 的第三个活动中没有明确关闭它。这是个问题吗?

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    PlayerDetails.this.finish();
}

我正在使用的这个 onPause() 方法

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    if (keyCode==KeyEvent.KEYCODE_BACK){
        AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
        alert.setIcon(R.drawable.ic_launcher);
        alert.setTitle(R.string.app_name);
        alert.setMessage("Really Exit?");
        alert.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(final DialogInterface dialog, final int which) {
                    MainActivity.this.finish();
                    dialog.dismiss();
                    }
        });
        alert.setNegativeButton("No", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(final DialogInterface dialog, final int which) {
                    dialog.dismiss();
                    }
        });
        try{
        AlertDialog dialog = alert.create();
        dialog.show();
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
    return true;
}

这是我关闭应用的 mainActivity 方法

【问题讨论】:

  • 你能写一些sn-ps的代码吗?
  • 尝试给我们一些代码并检查您的主要活动中的按钮(退出),该按钮定义是否包含指向第三个活动的任何意图链接?或者只是简单的 system.kill 或 finish() 或 android.process.os.kill(android.process.os.kill.mypid) [把这些当作伪,搜索正确的格式我的坏我现在不记得了]
  • @akshaybhanage 只需调用 finish();当您开始下一个活动时,但当您从主要活动转到任何活动时不要调用它
  • 只要完成()现有的活动每当你从一个活动转移到另一个活动时
  • 是的,我正在使用它。但为什么它会在结束 mainActivity 时进行第三次活动

标签: android android-activity onpause


【解决方案1】:

您可以使用Flags 而不是在每个活动中每次都调用finish()。当您开始一个新的活动时,只需使用FLAG_ACTIVITY_CLEAR_TASK 后跟FLAG_ACTIVITY_NEW_TASKIntent,这将清除堆栈缓冲区并以新的方式启动活动。像..

  Intent intent = new Intent(current_context, destination_activity.class);
  intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
  startActivity(intent);

您可以在conversation 中找到有关标志的更多信息。

【讨论】:

    【解决方案2】:

    使用 onStop() 覆盖方法而不是使用 onPause(),由于某些原因,onPause 可能不会被调用,但 onStop 会。

    @Override
    protected void onStop() {
         // TODO Auto-generated method stub
         super.onPause();
         finish();
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多