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 を作成しました。

彼はアラーム受信機を使用してそれを明示的にカバーします。うまく機能し、チェックインする価値があります。これにより、アラーム レシーバーからのリクエストがキューに入れられ、バックグラウンドで動作し、別のスレッドで実行しながらデバイスを起動します。

于 2012-03-13T16:11:18.210 に答える