我有一个应用程序,可以从设备中获取联系人列表。除非从BOOT_COMPLETED广播接收器调用,否则每次都会按预期完美地工作。当从应用程序本身调用时,会返回联系人列表,但是当设备启动时从该广播接收器调用时,它将尝试获取联系人但冻结,如果我有打印日志语句,则表明它通过了联系人列表,但在某些时候最终冻结。
我的BOOT_COMPLETED广播接收器会立即设置警报:
||
警报接收器然后通过调用新的AlarmManager alarmManager = (AlarmManager)context.getSystemService(context.ALARM_SERVICE);
//set time to now to trigger now
Calendar calendar = Calendar.getInstance();
long notificationTime = calendar.getTimeInMillis();
Intent intent = new Intent(context, EndBlurAlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
alarmManager.set(AlarmManager.RTC, notificationTime, pendingIntent);
来调用异步任务,然后asynctask GetNewContactsTask设置如下:
GetNewContactsTask(this).execute();
但是从未调用该任务的onPostExecute,它在doInBackground()方法中挂起。获取联系人的PhoneDataRetriever的getContacts()方法设置如下:
@Override
protected List<Contact> doInBackground(Void... voids) {
if(context != null){
return PhoneDataRetriever.getInstance(context).getContacts();
}
return null;
}
@Override
protected void onPostExecute(List<Contact> resultList){
PrefManager.setup(context);
MyLog.i("Returned contact list of size " + resultList.size() + ". Saving...");
}
这是通常有效的方法,但是当从这个启动接收器调用时,它会冻结我评论的位置。它将经历多次循环,但最终将在该位置冻结(我以前在整个方法中都有Log语句来弄清楚正在发生的事情)。
广播接收器在尝试获取联系人时会冻结什么?