获取联系人冻结应用程序

时间:2015-07-03 20:52:13

标签: android android-asynctask broadcastreceiver contacts intentservice

我有一个应用程序,可以从设备中获取联系人列表。除非从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语句来弄清楚正在发生的事情)。

广播接收器在尝试获取联系人时会冻结什么?

0 个答案:

没有答案