我在我的申请中发现了非常奇怪的行为。
我的应用程序有一个服务和一个活动,在我的应用程序的服务部分中,我需要执行LogCat命令,该命令将其输出转储到存储在设备的SD卡中的文本文件中。
要在我的服务中运行LogCat命令,我使用了以下代码:
Process p = Runtime.getRuntime().exec("logcat -v time -f /mnt/sdcard/log.txt &");
以上代码在后台运行,到目前为止,我已经实现了我的需求。
但是从设备上卸载应用程序后,上面的命令甚至正在运行。 SD卡中的log.txt文件不断增加。
我已查看“应用程序 - > ManageApplications - > RunningServices”,但我的服务没有运行。
请在卸载我的应用程序时帮助我停止后台进程。
这个问题很奇怪,但它正在发生。
这些症状消失了,我只重新启动了设备。
答案 0 :(得分:3)
您正在启动一个新流程,因此它根本不依赖于您当前的流程。当您的应用程序被杀死时,它不会被杀死。我在这里只知道两个选项: 1)使用-d(我相信)运行logcat,它会在到达缓冲区末尾时退出。默认情况下,Logcat会一直运行,直到它关闭为止,如果您只想转储日志,则应使用-d。 2)如果你不想要转储,但希望它继续流式传输到文件,那么没有干净的方法来杀死它。我知道如何执行ps然后读取控制台缓冲区并解析它以查找logcat进程的pid然后使用Process.killProcess终止进程的唯一方法。
答案 1 :(得分:0)
您可以记住Runtime返回的进程,并在卸载应用程序时终止它。