关于Service引起ANR的问题

my1249KB 2012-05-16 08:15:40
这是我自己写的服务,用来启动一个广播接收器

MyService.java

package zzx.Android;

import android.app.Activity;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class MyService extends Service{

private ShutDownReceiver sr = null;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {



MyService.this.sr = new ShutDownReceiver();


return Service.START_CONTINUATION_MASK;

}

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}

}


log:

05-16 12:06:12.811: E/ActivityManager(59): ANR in zzx.Android
05-16 12:06:12.811: E/ActivityManager(59): Reason: Executing service zzx.Android/.MyService
05-16 12:06:12.811: E/ActivityManager(59): Load: 0.33 / 0.2 / 0.17
05-16 12:06:12.811: E/ActivityManager(59): CPU usage from 462005ms to 47ms ago:
05-16 12:06:12.811: E/ActivityManager(59): system_server: 4% = 3% user + 1% kernel / faults: 2785 minor 1 major
05-16 12:06:12.811: E/ActivityManager(59): qemud: 0% = 0% user + 0% kernel
05-16 12:06:12.811: E/ActivityManager(59): adbd: 0% = 0% user + 0% kernel / faults: 60 minor
05-16 12:06:12.811: E/ActivityManager(59): m.android.phone: 0% = 0% user + 0% kernel / faults: 21 minor
05-16 12:06:12.811: E/ActivityManager(59): ndroid.launcher: 0% = 0% user + 0% kernel / faults: 445 minor
05-16 12:06:12.811: E/ActivityManager(59): doujia.phoenix2: 0% = 0% user + 0% kernel / faults: 236 minor
05-16 12:06:12.811: E/ActivityManager(59): d.process.acore: 0% = 0% user + 0% kernel / faults: 1202 minor
05-16 12:06:12.811: E/ActivityManager(59): id.defcontainer: 0% = 0% user + 0% kernel / faults: 92 minor
05-16 12:06:12.811: E/ActivityManager(59): events/0: 0% = 0% user + 0% kernel
05-16 12:06:12.811: E/ActivityManager(59): logcat: 0% = 0% user + 0% kernel
05-16 12:06:12.811: E/ActivityManager(59): rild: 0% = 0% user + 0% kernel
05-16 12:06:12.811: E/ActivityManager(59): utmethod.pinyin: 0% = 0% user + 0% kernel / faults: 7 minor
05-16 12:06:12.811: E/ActivityManager(59): com.svox.pico: 0% = 0% user + 0% kernel / faults: 11 minor
05-16 12:06:12.811: E/ActivityManager(59): netd: 0% = 0% user + 0% kernel / faults: 29 minor
05-16 12:06:12.811: E/ActivityManager(59): zygote: 0% = 0% user + 0% kernel / faults: 10 minor
05-16 12:06:12.811: E/ActivityManager(59): installd: 0% = 0% user + 0% kernel / faults: 65 minor
05-16 12:06:12.811: E/ActivityManager(59): ndroid.settings: 0% = 0% user + 0% kernel / faults: 9 minor
05-16 12:06:12.811: E/ActivityManager(59): +zzx.Android: 0% = 0% user + 0% kernel
05-16 12:06:12.811: E/ActivityManager(59): +zzx.Android: 0% = 0% user + 0% kernel
05-16 12:06:12.811: E/ActivityManager(59): TOTAL: 8% = 5% user + 2% kernel + 0% irq + 0% softirq

为什么这个服务总会引起ANR呢?是因为Service中不能执行耗时操作,要在新的线程中执行吗?
可是我只是启动了一个广播接收器,不算耗时操作吧?

初学Android,麻烦各位高手帮忙!
...全文
822 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
my1249KB 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

可以使用IntentService
[/Quote]

已经解决了,把这句:
return Service.START_CONTINUATION_MASK; 


改成:
return super.onStartCommand(intent, flags, startId);


就对了。

还是感谢1楼的热心~
manoel 2012-05-16
  • 打赏
  • 举报
回复
可以使用IntentService

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧