android – 崩溃的服务在很长一段时间后重新启动

android – 崩溃的服务在很长一段时间后重新启动,第1张

概述我在前台运行服务.有时它会被终止,大概是出于内存的原因(尽管我对LogCat日志并不是100%肯定).已终止的其他服务计划在5000毫秒内重新启动,但查看日志,我的服务重新启动时间很长,例如: 11-15 15:39:48.756: W/ActivityManager(375): Scheduling restart of crashed service com.example.app/com.e 我在前台运行服务.有时它会被终止,大概是出于内存的原因(尽管我对LogCat日志并不是100%肯定).已终止的其他服务计划在5000毫秒内重新启动,但查看日志,我的服务重新启动时间很长,例如:
11-15 15:39:48.756: W/ActivityManager(375): Scheduling restart of crashed service com.example.app/com.example.SensorService in 1019562ms

有什么可以解释这个?如何设置重启间隔?我已经看到一些建议,通知服务重新启动时延迟较短,但我的服务确实有通知.

解决方法 从 com/android/server/am/ActiveServices.java(未曝光)
// How long we wait for a service to finish executing.static final int SERVICE_TIMEOUT = 20*1000;// How long a service needs to be running until restarting its process// is no longer consIDered to be a @R_710_4404@ of the service.static final int SERVICE_RESTART_DURATION = 5*1000;// How long a service needs to be running until it will start back at// SERVICE_RESTART_DURATION after being killed.static final int SERVICE_reset_RUN_DURATION = 60*1000;// Multiplying factor to increase restart duration time by,for each time// a service is killed before it has run for SERVICE_reset_RUN_DURATION.static final int SERVICE_RESTART_DURATION_FACTOR = 4;// The minimum amount of time between restarting services that we allow.// That is,when multiple services are restarting,we won't allow each// to restart less than this amount of time from the last one.static final int SERVICE_MIN_RESTART_TIME_BETWEEN = 10*1000;// Maximum amount of time for there to be no activity on a service before// we consIDer it non-essential and allow its process to go on the// LRU background List.static final int MAX_SERVICE_INACTIVITY = 30*60*1000;

你发生的事情可能是你的服务比SERVICE_reset_RUN_DURATION快死,然后重启时间乘以SERVICE_RESTART_DURATION_FACTOR.

从第881行开始:

// If it has been a "reasonably long time" since the service            // was started,then reset our restart duration back to            // the beginning,so we don't infinitely increase the duration            // on a service that just occasionally gets killed (which is            // a normal case,due to process being killed to reclaim memory).            if (Now > (r.restartTime+resetTime)) {                r.restartCount = 1;                r.restartDelay = minDuration;            } else {                if ((r.serviceInfo.applicationInfo.flags                        &ApplicationInfo.FLAG_PERSISTENT) != 0) {                    // Services in peristent processes will restart much more                    // quickly,since they are pretty important.  (Think systemUI).                    r.restartDelay += minDuration/2;                } else {                    r.restartDelay *= SERVICE_RESTART_DURATION_FACTOR;                    if (r.restartDelay < minDuration) {                        r.restartDelay = minDuration;                    }                }            }

下面的行将支持您的服务.

r.restartDelay *= SERVICE_RESTART_DURATION_FACTOR;

因此,如果您的服务在运行SERVICE_reset_RUN_DURATION之前死亡,您应该修复此案例.

总结

以上是内存溢出为你收集整理的android – 崩溃的服务在很长一段时间后重新启动全部内容,希望文章能够帮你解决android – 崩溃的服务在很长一段时间后重新启动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1134571.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存