08-02 14:55:31.760: E/ActivityManager(1351): ANR in com.android.bai
08-02 14:55:31.760: E/ActivityManager(1351): Reason: Broadcast of Intent { act=android.intent.action.SCREEN_ON flg=0x40000010 }
08-02 14:55:31.760: E/ActivityManager(1351): Load: 0.45 / 0.89 / 0.77
08-02 14:55:31.760: E/ActivityManager(1351): CPU usage from 12373ms to 3359ms ago:
08-02 14:55:31.760: E/ActivityManager(1351):   0.5% 1351/system_server: 0.3% user + 0.2% kernel / faults: 61 minor
08-02 14:55:31.760: E/ActivityManager(1351):   0.4% 1442/com.android.systemui: 0.3% user + 0.1% kernel / faults: 10 minor
08-02 14:55:31.760: E/ActivityManager(1351):   0.4% 2230/adbd: 0.1% user + 0.3% kernel / faults: 31 minor
08-02 14:55:31.760: E/ActivityManager(1351):   0.4% 3994/com.android.bai: 0.3% user + 0.1% kernel / faults: 10 minor
08-02 14:55:31.760: E/ActivityManager(1351):   0.2% 1085/yaffs-bg-1: 0% user + 0.2% kernel
08-02 14:55:31.760: E/ActivityManager(1351):   0.2% 3100/dhd_watchdog: 0.2% user + 0% kernel
08-02 14:55:31.760: E/ActivityManager(1351):   0.2% 4032/com.huawei.phoneplus:pushservice: 0% user + 0.2% kernel / faults: 3 minor
08-02 14:55:31.760: E/ActivityManager(1351):   0% 1182/surfaceflinger: 0% user + 0% kernel
08-02 14:55:31.760: E/ActivityManager(1351):   0% 1519/com.huawei.inputmethod.hwpal: 0% user + 0% kernel / faults: 9 minor
08-02 14:55:31.760: E/ActivityManager(1351):   0% 1804/com.huawei.android.dmclient: 0% user + 0% kernel / faults: 33 minor
08-02 14:55:31.760: E/ActivityManager(1351):   0% 2476/com.wandoujia.phoenix2: 0% user + 0% kernel
08-02 14:55:31.760: E/ActivityManager(1351): 1.4% TOTAL: 0.8% user + 0.5% kernel
08-02 14:55:31.760: E/ActivityManager(1351): CPU usage from 649ms to 1170ms later:
08-02 14:55:31.760: E/ActivityManager(1351):   7.8% 4032/com.android.bai:pushservice: 3.1% user + 4.6% kernel / faults: 53 minor
08-02 14:55:31.760: E/ActivityManager(1351):     6.2% 4052/ReceiverDispatc: 1.5% user + 4.6% kernel
08-02 14:55:31.760: E/ActivityManager(1351):     3.1% 4034/GC: 3.1% user + 0% kernel
08-02 14:55:31.760: E/ActivityManager(1351):   5.7% 1351/system_server: 3.8% user + 1.9% kernel / faults: 1 minor
08-02 14:55:31.760: E/ActivityManager(1351):     3.8% 1367/ActivityManager: 0% user + 3.8% kernel
08-02 14:55:31.760: E/ActivityManager(1351):     1.9% 1362/Binder Thread #: 1.9% user + 0% kernel
08-02 14:55:31.760: E/ActivityManager(1351):     1.9% 1517/Binder Thread #: 1.9% user + 0% kernel
08-02 14:55:31.760: E/ActivityManager(1351):     1.9% 1721/Binder Thread #: 1.9% user + 0% kernel
08-02 14:55:31.760: E/ActivityManager(1351):     1.9% 5526/Binder Thread #: 1.9% user + 0% kernel
08-02 14:55:31.760: E/ActivityManager(1351):   1.4% 3100/dhd_watchdog: 1.4% user + 0% kernel
08-02 14:55:31.760: E/ActivityManager(1351): 21% TOTAL: 9.6% user + 11% kernel接收广播时没有什么异常操作,只是将这个屏幕点亮事件以preference形式存储到了XML文件中。而且SCREEN_ON也是以动态注册的。
SharedPreferences preference = context.getSharedPreferences("reportLog", Context.MODE_MULTI_PROCESS);

解决方案 »

  1.   

    你把收到广播后进行的操作放到一个Thread里面去。
      

  2.   


    new Thread()
    {
    @Override
    public void run()
    {
       //你的代码
    }
    }.start();
      

  3.   

    这个方式我是知道的,但是我更想知道的是原因,为什么我只是接收一个点亮屏幕的广播就会出现ANR。
    另外补充下这个问题:我的程序在一般的手机上跑的都是没有问题的,但是到双卡双待华为T8808手机上就必然出现ANR,百思不得其解。若是因为我的code中出现了问题而导致,虽然在写在run里面,它也不一定执行的完整,那么功能就不是完整的了。
      SharedPreferences preference = context.getSharedPreferences(
    "reportLog", Context.MODE_MULTI_PROCESS);
    Editor editor = preference.edit();
    if (Intent.ACTION_SCREEN_ON.equals(action)) {
        
         editor.putLong(PushConst.SystemStatus.STR_LAST_SCREEN_ON, System.currentTimeMillis()).commit();
        
            }
    外面有try catch。难道是因为手机上的系统不识别Context.MODE_MULTI_PROCESS标示么。
      

  4.   

    1.打个log,看看时间。
    2.把commit,改成apply
      

  5.   

    请问楼主第三方调用你的程序具体是怎么出错的?是因为第三方在接受到SCREEN_ON的广播之后调用你的程序,出现了耗时操作吗?
    我现在经常也遇到这种问题,非常头疼,希望求教一下。
      

  6.   

    请问楼主你是说是别的应用程序调用你的com.android.bai 这个应用程序导致anr的吗?并且第三方应用是如何调用你的应用程序的?