如何以编程方式强制停止我的 android 应用程序?
Posted
技术标签:
【中文标题】如何以编程方式强制停止我的 android 应用程序?【英文标题】:How to force stop my android application programmatically? 【发布时间】:2011-07-03 07:28:41 【问题描述】:我想在单击 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)时,它会异常停止,看起来像是完全完成,并且“强制停止”按钮看起来已禁用。
【问题讨论】:
别这样。在这里阅读原因:***.com/questions/2033914/… 为什么需要这样做?最佳实践是让操作系统管理应用程序生命周期,包括进程死亡。 这完成了 Activity 而不是应用程序。 How to force stop an Android app的可能重复 【参考方案1】:另一种方法是
android.os.Process.killProcess(android.os.Process.myPid());
我认为这样做并没有那么糟糕,只要您将这些电话放在onDestroy()
中即可。 (如果您在事件处理过程中终止进程,则可能会发生各种不好的事情——比如触摸焦点进入以太。)
尽管如此,您需要一个令人信服的理由来偏离最佳实践,即只需调用 finish()
并让操作系统在需要时/如果需要时关闭您的进程。
【讨论】:
不推荐使用此功能的原因之一是,如果用户切换回应用程序,应用程序启动速度会更快。真的,无缘无故终止进程只是不好的做法。 我想强制停止其他应用程序。此方法无效。 @AndroidDeveloper - 关于杀死另一个应用程序,请参阅this question。 这不是一个好的选择。 Google 建议不要这样做。使用以下解决方案:***.com/a/34340126/2349947 感谢您的解释,@Ted Hopp。现在我明白你的意思了。谢谢【参考方案2】:注意:这不会杀死整个应用程序,但如果您想要完成所有应用程序活动,这是最佳选择。
Android ≥ 16
finishAffinity();
安卓
ActivityCompat.finishAffinity(Activity activity)
希望对你有帮助
【讨论】:
这只是在多个活动上同时调用“finish()”的一种方式。这仍然不会杀死应用程序本身。 你是对的!我将在答案中提到这一点 @Vinoth Vino 很高兴它有帮助 我发现这个答案解决了我在 android.os.Process.killProcess(pid) 对我不起作用时反应原生 0.38 和反应原生路由器通量 3.38.0 的问题;它导致应用程序再次重新打开。谢谢!【参考方案3】:杀死应用程序的不好方法是System.exit(0)
编辑: 我相信我欠一些解释。 Android 自己处理应用程序生命周期,您不应该“强制关闭”它,而且我不知道有什么好的方法。通常,如果您的应用程序在后台仍然存在,则可以,这样如果用户再次启动它,它会很快弹出。
【讨论】:
如果我想处理一个异常(比如没有检测到网络!!)然后在应用程序的顶部更进一步......因为当代码的其他部分开始使用他们抛出的 http 结果时nullpointerexceptions 但我不想让代码到达那里!我想显示一个警告对话框,让用户知道错误并关闭应用程序,因为简单地处理异常仍然保持应用程序打开.....我该怎么办???? @Shark - 如果您的程序在捕获异常后继续执行,则问题出在您的错误处理例程上。如果抛出异常,“代码的其他部分”永远不应该尝试使用 http 结果。由于异常而终止应用程序是一种非常糟糕的编程方法......但它真的很快。我认为您可以为此提出一个单独的问题。 我在上面睡了一觉,冷静了一点,答案很明确!以我现在想要的方式工作,而无需强制终止应用程序。是的,这是我使用的一些糟糕而愚蠢的编码......修复了这个问题:)我对 Android 和 Java 非常陌生,事实上......需要时间来弄清楚基础知识:P @m0s 谢谢!【参考方案4】:我知道回复晚了,希望对大家有所帮助。
你可以在你的 sn-p 中尝试finishAndRemoveTasks();
而不是finish();
。
这会杀死您的应用程序的所有活动和所有进程,甚至从任务管理器中删除最近的应用程序。
注意:如果您在代码中使用了任何类型的handler
或thread
,请确保删除其功能,然后使用上面建议的代码,否则会出现NullPointer Exception
或ResourceNotFound Exception
。
【讨论】:
这不会关闭应用程序的进程。除非进程消失,否则静态数据、应用程序组件和分配给动态加载库的内存等不会被释放。【参考方案5】:短小精悍
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
【讨论】:
【参考方案6】:为什么不对 ActivityManager 进行 Shell-Call?
try
Runtime.getRuntime().exec("am force-stop com.me.myapp");
catch (IOException e)
e.printStackTrace();
【讨论】:
因为您需要 root 访问权限?【参考方案7】:下面的链接有解决方案。 它对我有用。
finishAffinity()
How to force stop my android application programmatically?
【讨论】:
以上是关于如何以编程方式强制停止我的 android 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 中以编程方式强制重启/重新加载 Playback 设备?