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

时间:2010-07-13 20:37:35

标签: android process android-activity kill

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

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

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

一切都以某种方式保持活着。

我如何真正从内存中移除我的活动?

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

8 个答案:

答案 0 :(得分:24)

  1. 点击按钮
  2. ,按 完成();
  3. 将此行添加到onDestroy方法:
  4. 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()。这有效   关闭我的申请。

Please don't do this

  

我的申请的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()立即用所有本机库,服务等卸载整个虚拟机。