2012-03-13 16 views
2

サービスを呼び出すAlarmManagerを実装しました。問題はAsyncTaskで起動しても、メインスレッドをブロックしていることです。AlarmManagerがメインスレッドをブロックしています

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); 
    } 
} 

私はそれが私のメインスレッドをブロックしているため、非同期的にそれを実行する必要があります。これは私のAsyncTaskの源です。

答えて

7

アラームをAsyncTaskに設定しても問題ありません。アラームマネージャは、メインスレッドでサービスを開始します。なぜなら、サービスがどのように機能するのかということです。

あなたの問題を解決するには、アラームがで実行するAsyncTaskを作成するために開始されたサービスを変更する必要があります。

+0

私はAsincTaskで自分のサービスを実行しましたが、正常に動作します。どうもありがとう。 – Alex

+0

私の場合、彼らはサービス中の前景の通知です。私はasynctaskからの通知を開始し、毎秒Timerを使用して繰り返しますが、アラームマネージャのブロッキング通知は、これを修正する方法です。事前に感謝します。 –

0

私が知っているが、リンクファームなかったが、CommonsguyはWakeFullIntentService

彼を書きました明示的には、アラーム受信機を使用してそれをカバーします。チェックアウトの価値がある素晴らしい作品です。これは、アラーム受信機からの要求を待ち行列に入れ、バックグラウンドで動作し、別のスレッドで動作しながらデバイスを起動させます。

関連する問題