在某些特定情况下,Android会将我的服务杀死在包com.net.myspeechservice中,例如,当手机上有呼叫时,它会终止服务。 logcat显示我这些统计数据。Android杀死我的服务需要了解CPU状态
看起来很明显,它因CPU负载而死亡。
我没有得到的是CPU消耗的百分比是由我的应用程序引起的?它没有显示出来。
我不明白手段?
Load: 3.13/2.78/2.26
如何从这些统计数据驴,以多大的比例是由我的应用程序引起的。
请指教。
感谢,
06-21 06:44:35.042: E/ActivityManager(88): ANR in com.net.myspeechservice
06-21 06:44:35.042: E/ActivityManager(88): Reason: Executing service com.net.myspeechservice/.services.ManagementService
06-21 06:44:35.042: E/ActivityManager(88): Load: 3.13/2.78/2.26
06-21 06:44:35.042: E/ActivityManager(88): CPU usage from 10340ms to 0ms ago:
06-21 06:44:35.042: E/ActivityManager(88): 44% 178/com.android.phone: 43% user + 1.8% kernel/faults: 179 minor
06-21 06:44:35.042: E/ActivityManager(88): 25% 36/surfaceflinger: 21% user + 3.6% kernel
06-21 06:44:35.042: E/ActivityManager(88): 10% 38/mediaserver: 8.1% user + 2.6% kernel
06-21 06:44:35.042: E/ActivityManager(88): 5.1% 1496/android.process.acore: 2.8% user + 2.3% kernel/faults: 3984 minor
06-21 06:44:35.042: E/ActivityManager(88): 3.3% 150/com.android.systemui: 3.3% user + 0% kernel/faults: 6 minor
06-21 06:44:35.042: E/ActivityManager(88): 1.9% 45/adbd: 0.2% user + 1.6% kernel/faults: 420 minor
06-21 06:44:35.042: E/ActivityManager(88): 0.6% 88/system_server: 0.3% user + 0.2% kernel/faults: 1 minor
06-21 06:44:35.042: E/ActivityManager(88): 0% 6391/ekawas.blogspot.com: 0% user + 0% kernel/faults: 40 minor
06-21 06:44:35.042: E/ActivityManager(88): 0.1% 35/rild: 0% user + 0% kernel
06-21 06:44:35.042: E/ActivityManager(88): 100% TOTAL: 82% user + 17% kernel + 0.1% softirq
06-21 06:44:35.042: E/ActivityManager(88): CPU usage from 1521ms to 2139ms later:
06-21 06:44:35.042: E/ActivityManager(88): 41% 178/com.android.phone: 40% user + 1.6% kernel/faults: 1 minor
06-21 06:44:35.042: E/ActivityManager(88): 50% 178/m.android.phone: 48% user + 1.6% kernel
06-21 06:44:35.042: E/ActivityManager(88): 1.6% 235/RILReceiver: 1.6% user + 0% kernel
06-21 06:44:35.042: E/ActivityManager(88): 29% 36/surfaceflinger: 22% user + 6.4% kernel
06-21 06:44:35.042: E/ActivityManager(88): 22% 61/SurfaceFlinger: 19% user + 3.2% kernel
06-21 06:44:35.042: E/ActivityManager(88): 1.6% 36/surfaceflinger: 1.6% user + 0% kernel
06-21 06:44:35.042: E/ActivityManager(88): 1.6% 63/Binder Thread #: 1.6% user + 0% kernel
06-21 06:44:35.042: E/ActivityManager(88): 1.6% 109/Binder Thread #: 0% user + 1.6% kernel
06-21 06:44:35.042: E/ActivityManager(88): 1.6% 1283/Binder Thread #: 0% user + 1.6% kernel
06-21 06:44:35.042: E/ActivityManager(88): 16% 38/mediaserver: 11% user + 4.9% kernel
06-21 06:44:35.042: E/ActivityManager(88): 6.5% 1551/gle.mp3.decoder: 4.9% user + 1.6% kernel
06-21 06:44:35.042: E/ActivityManager(88): 3.2% 1553/AudioTrackThrea: 1.6% user + 1.6% kernel
06-21 06:44:35.042: E/ActivityManager(88): 1.6% 72/AudioOut_1: 0% user + 1.6% kernel
06-21 06:44:35.042: E/ActivityManager(88): 1.6% 1552/OMXCallbackDisp: 0% user + 1.6% kernel
06-21 06:44:35.042: E/ActivityManager(88): 9.6% 88/system_server: 4.8% user + 4.8% kernel
06-21 06:44:35.042: E/ActivityManager(88): 8% 103/ActivityManager: 4.8% user + 3.2% kernel
06-21 06:44:35.042: E/ActivityManager(88): 1.6% 1496/android.process.acore: 0% user + 1.6% kernel/faults: 196 minor
06-21 06:44:35.042: E/ActivityManager(88): 3.3% 1542/ApplicationsPro: 0% user + 3.3% kernel
06-21 06:44:35.042: E/ActivityManager(88): 100% TOTAL: 82% user + 17% kernel
实际上,CPU负载并不重要。此消息指出您的应用/服务没有及时响应用户输入,因此被框架杀死。 ANR in com.net.myspeechservice 06-21 06:44:35.042:E/ActivityManager(88):原因:执行服务com.net.myspeechservice/.services.ManagementService ANR - 应用程序未响应。或者有时也称为应用程序冻结。如果您的活动无法足够快地处理触摸,就会发生这种情况。你需要检查你的应用程序的逻辑,看看是否有一个地方做了一些长时间的计算或任何死锁。 –
事实上,它不会觉得,因为这发生在有来电时,我的活动甚至不可见。但是我有一个服务只运行.. – Ahmed
“com.net.myspeechservice”这是你的包吗?只是想说清楚。该日志在该软件包中显示ANR问题。如果你的软件包不同,那么这个日志与你的服务被杀无关。在这种情况下,您的服务死亡的原因是android耗尽了可用内存并决定杀死可能会死的东西(后台应用程序而不是关键服务)。这可能发生,你需要做好准备。但是,您可以让您的服务在被杀后自动重新启动。为此,您应该从您的服务的onStartCommand()返回START_STICKY。 –