gpt4 book ai didi

android - 进程已终止/计划重启崩溃的服务

转载 作者:太空狗 更新时间:2023-10-29 14:28:04 26 4
gpt4 key购买 nike

我有一项服务也是 LocationListener。在发生新的位置事件时,它会执行某种可能需要时间的网络操作;这就是它作为 AsyncTask 实现的原因。

我经常在真实设备的日志中看到:

03-29 17:02:20.847 D/dalvikvm(  235): GC_FOR_ALLOC freed 961K, 29% free 10234K/14215K, paused 26ms
03-29 17:02:20.855 I/DemoService( 555): DiyScheduer.onStart
03-29 17:02:20.855 I/ggheart ( 555): onStart
03-29 17:02:21.097 V/PhoneStatusBar( 235): setLightsOn(true)
03-29 17:02:21.121 W/IInputConnectionWrapper(11244): showStatusIcon on inactive InputConnection
03-29 17:02:21.277 I/ActivityManager( 161): Process android.process.media (pid 11298) has died.
03-29 17:02:22.058 I/ActivityManager( 161): Process com.idavydov.myapp (pid 11051) has died.
03-29 17:02:22.066 I/WindowManager( 161): WIN DEATH: Window{41b05850 com.idavydov.myapp/com.idavydov.myapp.MyActivity paused=false}
03-29 17:02:22.074 W/ActivityManager( 161): Scheduling restart of crashed service com.idavydov.myapp/.MyService in 5000ms

通常它发生在加载一些大型应用程序之后。

这是内存不足的原因吗?那么为什么日志中没有这样的信息呢?

附言在其他问题中,我看到了解释,原因是任务花费了太多时间。但我已将以下代码添加到我的 AsyncTask 中,但无法在模拟器中重现崩溃。

    protected Boolean doInBackground(...) {
...
long time = System.currentTimeMillis();
while (System.currentTimeMillis() - time < 11 * 1000);
....
}

谢谢

最佳答案

我认为你混合了两种东西。Android 不允许阻塞 UI 线程,如果是这样,它会杀死你的应用程序。除非你把阻塞处理和循环放到AsyncTask的后台进程中。

除此之外,当 android 内存不足或识别出您的应用对用户没有影响时,它会在没有任何警告的情况下终止您的应用。如果您想让您的应用保留更长时间,您将需要有粘性的服务和良好的应用生命周期管理。

关于android - 进程已终止/计划重启崩溃的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9926321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com