サービスで非同期タスクを使用して、バックグラウンドで実行する必要のある作業を処理します。UIを更新する必要がある場合は、非同期タスクのprogressUpdateメソッドを使用して、関心のあるアクティビティにブロードキャストを送り返します。
疑似例。
アクティビティ
onCreate-> startServiceを実行し、新しいbroadcastReceiverを作成します。onReceiveメソッドをオーバーライドして、特定のインテントをテストしてください。
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(yourActionType)) {
//do work here
}
}
};
onResume->放送受信機として登録
IntentFilter filter = new IntentFilter();
filter.addAction(yourActionType);
mLocalBroadcastManager.registerReceiver(broadcastReceiver, filter);
サービス
onCreate->ブロードキャストマネージャーを作成します。
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
onStartCommand->必要に応じて、新しい非同期タスクを作成して実行します。(onStartは複数回呼び出すことができます)
非同期タスク
doInBackground->必要なバックグラウンドタスクを開始します。この場合、音楽を再生します。定期的にpublishProgressを呼び出します
onProgressUpdate->更新されたステータスを示すsendBroadcast
Intent broadcastIntent = new Intent(yourActionType);
broadcastIntent.putExtra(whateverExtraData you need to pass back);
mLocalBroadcastManager.sendBroadcast(broadcastIntent);
onPostExecute->タスクが終了したことを示すsendBroadcast