AlarmManager блокирует основной поток

Я реализовал AlarmManager, который вызывает службу. Проблема в том, что хотя я запускаю его в AsyncTask, он блокирует основной поток. Это источник моей AsyncTask:

private class NotificationsServiceTask extends AsyncTask<Void, Void, Void> {
    private AlarmManager alarmMgr;
    private PendingIntent pi;

    @Override
    protected Void doInBackground(Void... params) {
        alarmMgr = (AlarmManager) LoginActivity.this.getSystemService(Context.ALARM_SERVICE);
        Intent serviceIntent = new Intent(LoginActivity.this, Service.class);
        pi = PendingIntent.getService(LoginActivity.this, 0, serviceIntent, 0);
        alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 120000, pi);
        return null;
    }


    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
    }
} 

Мне нужно сделать это асинхронно, потому что это блокирует мой основной поток.


person Alex    schedule 13.03.2012    source источник


Ответы (2)


Неважно, что вы установили будильник в AsyncTask. Диспетчер сигналов тревоги всегда будет запускать вашу службу в основном потоке, потому что так работают службы.

Чтобы решить вашу проблему, вам нужно будет изменить службу, с которой начинается тревога, чтобы создать AsyncTask для запуска.

person Brigham    schedule 13.03.2012
comment
Я выполнил свою службу в AsincTask, и она отлично работает. Большое спасибо. - person Alex; 13.03.2012
comment
В моем случае это уведомление переднего плана в службе. Я начал уведомление с асинтаска и для повторения использования таймера каждую секунду, но диспетчер тревог блокирует уведомление, это их способ исправить это, заранее спасибо - person pavan kvch; 23.11.2016

Я знаю, что это не ферма ссылок, но Commonsguy написал WakeFullIntentService.

Он явно покрывает это с помощью приемника сигналов тревоги. отлично работает, стоит проверить. Это поставит в очередь запросы от вашего приемника сигналов тревоги, будет работать в фоновом режиме и разбудит устройство, работая в отдельном потоке.

person Chris.Jenkins    schedule 13.03.2012