所以我有我的Activity,按下“退出”按钮我调用Activity.finish()。这有效地关闭了我的申请。
问题:我的应用程序的Dalvik过程仍然像背景中的僵尸一样徘徊。看起来这是正常的,因为其他应用程序也这样做。甚至hello-world示例也在内存中挂起..
我可以忍受这个,但不幸的是,这种行为使我的应用程序的开发变得痛苦。我有一个连接到我的Activity的远程服务,并且在我的Activity卸载之前这个服务不会卸载(正如它所说的那样)。
一切都以某种方式保持活着。
我如何真正从内存中移除我的活动?
我正在寻找类似Activity.finish_and_kill_my_process_please()调用或类似内容的东西。
答案 0 :(得分:24)
的 android.os.Process.killProcess(android.os.Process.myPid()); 强> 的
public void onDestroy() {
super.onDestroy();
android.os.Process.killProcess(android.os.Process.myPid());
}
答案 1 :(得分:8)
所以我有我的活动,并在按下 我打电话给“退出”按钮 Activity.finish()。这有效 关闭我的申请。
我的申请的Dalvik流程 仍然像一个僵尸一样闲逛 背景
该过程保存在缓存中,以供Android重复使用。你可以放心地忽略它。
我连接了远程服务 我的活动,这项服务不会 卸载,直到我的活动卸载 (正如它所说的那样)。
您的应用程序中可能存在错误,例如致电startService()
而未致电stopService()
,或致电bindService()
且未致电unbindService()
。
答案 2 :(得分:6)
尝试使用killBackgroundProcesses
方法:
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses("name.of.your.package");
您需要将KILL_BACKGROUND_PROCESSES
权限添加到AndroidManifest.xml
文件中。
答案 3 :(得分:4)
好吧,如果不仅是活动,还有你要终止的应用程序,你可以使用
System.exit(0)
人们说它已被弃用或不好的例子,但是,它是纯Java并且确实有效......
答案 4 :(得分:3)
通过终止该过程,您可以完全停止该应用程序。从后退按钮上的最后一个屏幕按下您可以通过以下方式终止该过程:
public void onBackPressed() {
super.onBackPressed();
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid); }
答案 5 :(得分:1)
与Java端的System.exit(0)类似,您也可以在onDestroy期间调用本机方法,该方法在C / C ++端调用exit(0)。这似乎迫使lib完全退出。它对我有用!
答案 6 :(得分:0)
通过使用ActivityManager,我们也可以关闭其他应用程序。
private ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
am.restartPackage("com.jimmy.appToBeClosed");
使用上面的代码应该在清单文件中具有android.permission.RESTART_PACKAGE
权限。
答案 7 :(得分:0)
System.exit()立即用所有本机库,服务等卸载整个虚拟机。