如何杀死我自己的活动 – 艰难的方式

所以我有我的活动,按下“退出”按钮我调用Activity.finish()。 这有效地关闭了我的申请。

问题:我的应用程序的Dalvik过程仍然像背景中的僵尸一样徘徊。 看起来这是正常的,因为其他应用程序也这样做。 甚至hello-world示例也在内存中徘徊。

我可以忍受这个,但不幸的是这种行为使我的应用程序的开发变得痛苦。 我有一个连接到我的Activity的远程服务,并且在我的Activity卸载之前这个服务不会卸载(正如它所说的那样)。

一切都以某种方式保持活着,没有任何理由。

我怎样才能真正从记忆中删除我的活动?

我正在寻找像Activity.finish_and_kill_my_process_please()调用或类似的东西。

所以我有我的活动,按下“退出”按钮我调用Activity.finish()。 这有效地关闭了我的申请。

请不要这样做 。

我的应用程序的Dalvik过程仍然像背景中的僵尸一样徘徊。

该过程保存在缓存中,以供Android重复使用。 你可以放心地忽略它。

我有一个连接到我的Activity的远程服务,并且在我的Activity卸载之前这个服务不会卸载(正如它所说的那样)。

您的应用程序中可能存在错误,例如调用startService()并且无法调用stopService() ,或者调用bindService()并且无法调用unbindService()

  1. 呼叫结束(); 点击按钮
  2. 将此行添加到onDestroy方法:

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

  public void onDestroy() { super.onDestroy(); android.os.Process.killProcess(android.os.Process.myPid()); } 

尝试使用killBackgroundProcesses方法:

 ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); activityManager.killBackgroundProcesses("name.of.your.package"); 

您需要将KILL_BACKGROUND_PROCESSES权限添加到AndroidManifest.xml文件中。

好吧,如果不仅是活动,还有你要终止的应用程序,你可以使用

System.exit(0)

人们说它已被弃用或不好的例子,但是,它是纯Java并且确实有用……

通过终止进程,您可以完全停止应用程序。从后退按钮上的最后一个屏幕按下您可以通过以下方式终止该进程:

 public void onBackPressed() { super.onBackPressed(); int pid = android.os.Process.myPid(); android.os.Process.killProcess(pid); } 

类似于Java端的System.exit(0),您也可以在onDestroy期间调用本机方法,该方法在C / C ++端调用exit(0)。 这似乎迫使lib完全退出。 它对我有用!

通过使用ActivityManager,我们也可以关闭其他应用程序。

 private ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); am.restartPackage("com.jimmy.appToBeClosed"); 

使用上面的代码应该在清单文件中具有android.permission.RESTART_PACKAGE权限。

System.exit()立即卸载整个虚拟机与所有本机库,服务等。