サービスで非同期タスクを使用して、バックグラウンドで必要な作業を処理します。 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 - >何が必要な背景タスクを開始します。この場合は音楽を演奏する。 onProgressUpdate publishProgress
に定期的に呼び出してください - > sendBroadcast示す更新状況
Intent broadcastIntent = new Intent(yourActionType);
broadcastIntent.putExtra(whateverExtraData you need to pass back);
mLocalBroadcastManager.sendBroadcast(broadcastIntent);
onPostExecuteを - > sendBroadcast示すタスクは
おかげで多くのことを終わりました。しかし、ブロードキャストメッセージはどうですか?彼らはローカルで使用するのに不便ではありませんか? – super
@superローカル放送の使用例を含めるために私の答えを編集しました。古いapi verisonをターゲットにしている場合は、ライブラリにandroid-support-v4.jarが含まれていることを確認してください。 – Mike
ありがとう。 – super