如何以编程方式强制停止我的android应用程序?

时间:2011-02-24 05:28:05

标签: android forceclose termination

当我点击closeButton时,我想强制停止我的Android应用程序。这是我的代码。

protected void onCreate(Bundle savedInstanceState) {

  this.setContentView(R.layout.layoutxml);

  this.closeButton = (Button)this.findViewById(R.id.close);

  this.closeButton.setOnClickListener(new OnClickListener() {

    @Override

    public void onClick(View v) {

      finish();

    }

  });

}

这完成了我的申请。如果我转到Settings -> Applications -> Manage applications -> <my application name>,我可以看到“强制停止”按钮已启用。这是否意味着我的申请没有完全停止?

如何完全完成我的Android应用程序并禁用“设置”中的“强制停止”按钮?根据我的有限经验,当应用程序中出现“异常”(例如NullPointerException)时,它会异常停止,看起来完全完成,并且“强制停止”按钮看起来已禁用。

6 个答案:

答案 0 :(得分:36)

另一种方式是

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

如果您将这些电话放在onDestroy()中,我认为这样做并不是那么糟糕。 (如果你在事件处理过程中杀死了你的进程,那么各种不好的事情 - 比如触摸焦点会进入以太 - 就会发生。)

然而,你需要一个令人信服的理由偏离最佳实践,即只需要调用finish()并让操作系统在需要的时候处理你的进程。

答案 1 :(得分:13)

注意:这不会杀死整个应用,但如果你想要做的就是完成所有的应用活动,这是最好的选择。

Android≥16

finishAffinity();

Android&lt; 16

ActivityCompat.finishAffinity(Activity activity)

希望这有帮助

答案 2 :(得分:2)

杀死应用程序的一个坏方法是System.exit(0)

编辑: 我相信我有一些解释。 Android自己处理应用程序生命周期,你不应该'ForceClose'它,我不知道有什么好办法。一般来说,如果您的应用程序在后台仍处于活动状态,则可以正常运行,这样如果用户再次启动它,它将很快弹出。

答案 3 :(得分:0)

为什么不对ActivityManager进行Shell调用?

try {
      Runtime.getRuntime().exec("am force-stop com.me.myapp");
    } catch (IOException e) {
      e.printStackTrace();
    }

答案 4 :(得分:0)

我知道这是一个较晚的答复,希望对您有所帮助。

您可以在代码段中尝试使用finishAndRemoveTasks();代替finish();

这将杀死您应用程序的所有活动和所有过程,甚至从任务管理器中删除最新应用程序。

注意:如果您在代码中使用了任何类型的handlerthread,请确保删除其功能,然后使用上面建议的代码(如果不是NullPointer Exception或{{ 1}}。

答案 5 :(得分:0)

简短

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);