android kill process,为什么Application有时会在killProcess上重启?

通常,通过调用退出我的应用程序:

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

表现良好而没有事故。

但每隔一段时间,应用程序将重新启动(退出后!)。

相关的日志片段显示:

.631: I/Process(15495): Sending signal. PID: 15495 SIG: 9 .641: W/AudioFlinger(121): write blocked for 252 msecs, 1279 delayed writes, thread 0xdc18 .651: I/ActivityManager(164): Process com.ef.myapp (pid 15495) has died. .651: I/WindowManager(164): WIN DEATH: Window{463659e8 com.ef.myapp/com.ef.myapp.MainActivity paused=false} .661: I/AudioService(164): AudioFocus abandonAudioFocus() from android.media.AudioManager@460b2b98 .701: I/ActivityManager(164): Start proc com.ef.myapp for activity com.ef.myapp/.MainActivity: pid=15589 uid=10077 gids={3003}

我知道,通过Android OS的设计, killProcess()不是终止应用程序的正确方法。 这是因为killProcess()会 立即停止进程,而不会给予应用程序任何阻止或准备它的任何方法或机会。

我知道当我调用finish()时 ,应用程序堆栈只是被推到后台(并且仍然存在于内存中)。 Android本身决定何时关闭应用程序(即从内存中删除其实例),通常这是在应用程序变为“最长时间未使用的最长时间”时完成的。 如果它真的是最后一个,它的行为实际上更容易预测。

问题是finish()仅停止并销毁调用它的活动。 它不会阻止应用程序或其他活动产生的其他活动。 因此,为了便于在开发过程中进行测试和调试,我使用killProcess()作为方便的快捷方式。

但是现在我看到这有副作用, 有时候会在自杀之后立即重新启动 – 所有这些都在30毫秒内完成 。

一个简单的解决方案是迭代所有应用程序的活动并完成它们。 但在继续这一过程之前,我很想知道Android OS中的应用程序是什么让应用程序自我复活。

为什么 Android会重启被杀死的应用程序?

为什么不一致? (即有时 )

第一次从安装程序,Web浏览器和IDE(IntelliJ,Eclipse等)启动应用程序的方式存在一个已知错误 。 请尝试安装您的应用程序而不启动它 ,然后从可用应用程序列表中启动它 ,看看问题是否消失。 请参阅很久以前提出的与此问题相关的问题:

您的应用是在单个进程中运行还是多个进程? killProcess将killProcess一个进程,不一定是整个应用程序。 尝试使用ActivityManager#killBackgroundProcesses(String packageName) 。

如果这不起作用,看起来这些链接可能有助于解释系统在进程被终止时的行为。

顺便说一句,Android系统正在重新启动你的应用程序……为了开发目的,可以操纵它的行为(即阻止应用程序强制关闭时重启),但推送应用程序时不应该这样做生产。

从ADT 17.0.0开始 ,有一个静态字段BuildConfig.DEBUG可以帮助您进行调试。 例如,您可以拥有一个包含所有正在运行的活动实例的静态类。 然后你可以一次完成所有这些。 我认为它比killProcess()更好……

请按照您的问题的预期答案链接。 android.os.Process.killProcess(pid)再次重启了进程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值