2

我已经实现了一个调用服务的 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);
    }
} 

我需要异步执行,因为它阻塞了我的主线程。

4

2 回答 2

7

在 AsyncTask 中设置警报并不重要。警报管理器将始终在主线程上启动您的服务,因为这就是服务的工作方式。

要解决您的问题,您需要修改警报开始创建AsyncTask以运行的服务。

于 2012-03-13T16:04:40.130 回答
0

我知道不是链接农场,但 Commonsguy 编写了WakeFullIntentService

He explicity covers it using an Alarm reciever. works great, worth checkin out. That will queue requests from your alarm receiver, work in the background and wake the device, whilst running on a separate thread.

于 2012-03-13T16:11:18.210 回答