1 . 从events log里面搜anr 01-05 10:24:10.066 555 572 I am_anr : [0,902,com.android.launcher3,13155909,Broadcast of Intent { act=android.intent.action.TIME_TICK flg=0x50000014 (has extras) }]
可以看出是在接收TIME_TICK 这个广播发生anr的,这个广播是在LauncherModel里面接收的,为了刷新动态日历图标, 一分钟刷新一次。
else if(context.getResources().getBoolean(R.bool.calendar_icon_support) &&
(Intent.ACTION_DATE_CHANGED.equals(action)
||Intent.ACTION_TIME_TICK.equals(action)
|| Intent.ACTION_TIME_CHANGED.equals(action)
|| Intent.ACTION_TIMEZONE_CHANGED.equals(action))){
Log.d(TAG, "calendar come in refresh");
final String packageName = "com.android.calendar";
enqueuePackageUpdated(new PackageUpdatedTask(
PackageUpdatedTask.OP_UPDATE, new String[]{packageName}));
}
接着看enqueuePackageUpdated里面做了什么操作,
void enqueuePackageUpdated(PackageUpdatedTask task) {
sWorker.post(task);
}
sWorker是一个Handler, 这个地方只是进行了一个post操作, 不管PackageUpdatedTask 的run方法里面进行了什么操作, 仅从这个地方看是不会导致TIME_TICK anr。
可以看出是在接收TIME_TICK 这个广播发生anr的,这个广播是在LauncherModel里面接收的,为了刷新动态日历图标, 一分钟刷新一次。
else if(context.getResources().getBoolean(R.bool.calendar_icon_support) &&
(Intent.ACTION_DATE_CHANGED.equals(action)
||Intent.ACTION_TIME_TICK.equals(action)
|| Intent.ACTION_TIME_CHANGED.equals(action)
|| Intent.ACTION_TIMEZONE_CHANGED.equals(action))){
Log.d(TAG, "calendar come in refresh");
final String packageName = "com.android.calendar";
enqueuePackageUpdated(new PackageUpdatedTask(
PackageUpdatedTask.OP_UPDATE, new String[]{packageName}));
}
接着看enqueuePackageUpdated里面做了什么操作,
void enqueuePackageUpdated(PackageUpdatedTask task) {
sWorker.post(task);
}
sWorker是一个Handler, 这个地方只是进行了一个post操作, 不管PackageUpdatedTask 的run方法里面进行了什么操作, 仅从这个地方看是不会导致TIME_TICK anr。