Android 如何扼杀我自己的活动——艰难之路
所以我有了我的活动,按下“退出”按钮,我就调用Activity.finish()。这实际上关闭了我的应用程序 问题是:我的应用程序的Dalvik进程仍然像僵尸一样挂在后台。这似乎是正常的,因为其他应用程序也这样做。甚至hello world的例子也挂在了内存中 我可以接受这种情况,但不幸的是,这种行为使我的应用程序的开发成为一种痛苦。我有一个远程服务连接到我的活动,这个服务将不会卸载,直到我的活动卸载(正如所说,它永远不会卸载) 一切都不知何故地保持着活力,没有什么好的理由 我如何才能真正从记忆中删除我的活动 我正在寻找类似活动的内容。请调用finish_和kill_my_process_please()或类似的内容。尝试使用以下方法: 您需要将权限添加到Android 如何扼杀我自己的活动——艰难之路,android,process,android-activity,kill,Android,Process,Android Activity,Kill,所以我有了我的活动,按下“退出”按钮,我就调用Activity.finish()。这实际上关闭了我的应用程序 问题是:我的应用程序的Dalvik进程仍然像僵尸一样挂在后台。这似乎是正常的,因为其他应用程序也这样做。甚至hello world的例子也挂在了内存中 我可以接受这种情况,但不幸的是,这种行为使我的应用程序的开发成为一种痛苦。我有一个远程服务连接到我的活动,这个服务将不会卸载,直到我的活动卸载(正如所说,它永远不会卸载) 一切都不知何故地保持着活力,没有什么好的理由 我如何才能真正从记忆
AndroidManifest.xml
文件中
因此,我有我的活动,并按
我呼叫的“退出”按钮
Activity.finish()。这有效地
关闭我的应用程序
我申请的Dalvik流程
仍然像一个僵尸一样在这里游荡
背景
这个过程被保存在缓存中,以备安卓系统重用。你可以放心地忽略它
我有一个远程服务连接到
我的活动,而此服务不会
卸载,直到我的活动卸载
(正如所说,它从来不会这样做)
您的应用程序中可能存在错误,例如调用startService()
但未能调用stopService()
,或者调用bindService()
但未能调用unbindService()
通过终止进程,您可以完全停止应用程序。从“后退”按钮的最后一个屏幕,您可以通过以下方式终止进程:
public void onBackPressed() {
super.onBackPressed();
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid); }
通过使用ActivityManager,我们还可以关闭其他应用程序
private ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
am.restartPackage("com.jimmy.appToBeClosed");
要使用上述代码,必须具有android.permission.RESTART\u包在清单文件中的权限。如果不仅是活动,而且是要终止的应用程序,您可以使用
System.exit(0)
人们说这是一个不推荐使用的或不好的例子,但是,它是纯Java的,并且确实有效……System.exit()会立即卸载整个虚拟机以及所有本机库、服务等。类似于System.exit(0),在Java端,您还可以在onDestroy期间调用一个本机方法,在C/C++端调用exit(0)。这似乎迫使lib完全退出。这对我有用 好的,这个方法似乎不再是ActivityManager类的一部分??Android 2.2Froyo有了一个新的API,但这是一个非常糟糕的主意。权限被标记为危险,用户将看到你的应用程序有能力杀死其他应用程序。虽然在开发过程中,除了晦涩难懂的测试之外,终止应用程序的进程几乎从来都不是一个好主意,但这是一种不必要的迂回方式。一个进程可以简单地退出()或终止自己-它不需要要求ActivityManager这样做。对于一个发布的应用程序,KillProcess()不是一个好主意。但对于开发阶段(为了调试目的加速终止应用程序),这是一个救命稻草+1.开发(临时使用)时绝对有用这有助于我卸载本机库:-)你知道人们为什么说这些话吗?它是否与应用程序如何在安卓操作系统中“生存”有关。?这很容易在我的一个应用程序中使用。。但我想先了解一下这种沮丧背后的理论。我想他们这么说是因为Android可以自己管理应用程序;所以我们不应该插嘴。我说这是胡说八道:如果是我的申请,除了我还有谁知道什么时候终止它呢System.exit并不等同于终止进程,它可能会恢复活动堆栈上已暂停的任何活动。更多信息请参见此处:谢谢@SullX!我想这是一个很好的例子,说明了为什么不推荐它:)如果System.exit()调用后还有“未完成”的活动,Android似乎可以重新启动应用程序。。。我一点都不知道!:)restartPackage现在已被弃用。改用KillBackgroundProcess。
public void onBackPressed() {
super.onBackPressed();
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid); }
private ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
am.restartPackage("com.jimmy.appToBeClosed");