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

如何以编程方式强制停止我的android应用程序?,android,forceclose,termination,Android,Forceclose,Termination,我想在单击关闭按钮时强制停止我的Android应用程序。这是我的密码 protected void onCreate(Bundle savedInstanceState) { this.setContentView(R.layout.layoutxml); this.closeButton = (Button)this.findViewById(R.id.close); this.closeButton.setOnClickListener(new OnClickListene

我想在单击关闭按钮时强制停止我的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();

    }

  });

}
我的申请到此结束。如果我转到
设置->应用程序->管理应用程序->
,我可以看到“强制停止”按钮已启用。这是否意味着我的申请没有完全停止


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

终止应用程序的坏方法是
System.exit(0)

编辑: 我想我应该解释一下。Android自己处理应用程序的生命周期,你不应该“强制关闭”它,我也不知道有什么好办法。一般来说,如果你的应用程序在后台仍然处于活动状态,它就可以了。这样,如果用户再次启动它,它就会很快弹出

另一种方法是

android.os.Process.killProcess(android.os.Process.myPid());
如果您将这些调用放在
onDestroy()
中,我认为这样做并没有那么糟糕。(如果你在事件处理过程中杀死你的进程,那么所有的坏事情,比如触摸焦点进入以太可能发生。)
然而,您需要一个令人信服的理由来偏离最佳实践,那就是只需调用
finish()
,让操作系统在需要的时候/如果需要的话终止您的进程。

注意:这不会终止整个应用程序,但是如果您想完成所有的应用程序活动,这是最好的选择

安卓≥ 16
finishafinity()

安卓<16
ActivityCompat.finishafinity(活动活动)


希望这能有所帮助

为什么不给ActivityManager打个Shell调用呢

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

我知道这是一个迟到的答复,希望这有助于一些人

您可以尝试
finishAndRemoveTasks()而不是
finish()在代码段中

这将杀死应用程序的所有活动和所有进程,甚至从task manager中删除最近的应用程序

注意:如果您在代码中使用了任何类型的
处理程序
线程
,请确保删除其功能,然后使用上述建议的代码,否则将发生
空指针异常
ResourceNotFound异常

简短

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

不要这样做。阅读这里为什么:你为什么需要这样做?最佳做法是让操作系统管理应用程序的生命周期,包括进程死亡。这将完成活动,而不是应用程序。不推荐使用此方法的原因之一可能重复,因为如果用户切换回应用程序,应用程序会启动得更快。真的,无故终止进程只是一种糟糕的做法。我想强制停止其他应用程序。此方法无效。@AndroidDeveloper-关于终止另一个应用程序,请参阅。这不是一个好的选择。谷歌建议不要这样做。使用以下解决方案:谢谢你的解释,@Ted Hopp。现在我明白你的意思了。谢谢,如果我想处理一个异常(比如说没有网络检测到!!),然后在应用程序顶部阻止进一步。。。因为当代码的其他部分开始使用http结果时,它们会抛出NullPointerException,但我不想让代码到达那里!我想显示一个警报对话框,让用户知道错误并关闭应用程序,因为简单地处理异常仍然可以保持应用程序打开。。。。。我该怎么办???@Shark-如果您的程序在捕获异常后继续执行,问题在于您的错误处理例程。如果抛出异常,“代码的其他部分”永远不会尝试使用http结果。由于异常而终止应用程序是一种非常糟糕的编程方法。。。但是它真的很快。我想你可以单独问一个问题。我在上面睡了一觉,冷静了一点,答案很清楚!按照我现在想要的方式工作,而不会强制关闭应用程序。是的,我用了一些糟糕而愚蠢的编码。。。修正:)我对Android和Java非常陌生。。需要时间来了解基本情况:P@m0s谢谢!这只是一种同时对多个活动调用“finish()”的方法。这仍然不会杀死应用程序本身。你是对的!我将在报告中提到这一点answer@VinothVino很高兴它帮助我找到了这个答案,解决了我在android.os.Process.killProcess(pid)不适合我的情况下react native 0.38和react native router flux 3.38.0的问题;这导致应用程序重新打开。谢谢因为您需要root访问权限?这不会关闭应用程序的进程。静态数据、应用程序组件和分配给动态加载库的内存等,除非进程停止,否则不会被释放。