2012-06-18 8 views
14

私はAndroidプログラミングを初めて使いました。そのため、自分のアプリを設計する最良の方法を選択する際の一般的な問題に直面しています。Androidサービスは、起動したアクティビティのUIをどのように更新できますか?

基本的にはメディアプレーヤーです。私は、活動が表示されていないときにもそれを再生したいので、メディアプレーヤーをサービス上で実行したい。

私の質問は、サービスの作業フロー(ソングが変更され、その名前が表示されるなど)に応じて、自分のアクティビティのUIを更新するにはどうすればよいですか?

私は

(?それが正しいようです)私は私の活動に私のサービスからインテントを送信し、UIの更新プログラムを起動するために、ローカルブロードキャストマネージャを使用することができます推測しかし...私は私のサービスを行うことになるでしょう音楽を演奏しながら(DBのクエリ/更新のような)いくつかのもの。 このため、私は別のプロセス(またはスレッド)でサービスを実行することを考えていました。

他のプロセスでサービスを実行していると思いますが、私はローカルのブロードキャストマネージャーを使用できません(これは正しいですか?)。

私は疑問が何であるかを説明したいと思います。だれかが助けることができますか?

ありがとう!

答えて

15

サービスで非同期タスクを使用して、バックグラウンドで必要な作業を処理します。 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示すタスクは

+0

おかげで多くのことを終わりました。しかし、ブロードキャストメッセージはどうですか?彼らはローカルで使用するのに不便ではありませんか? – super

+0

@superローカル放送の使用例を含めるために私の答えを編集しました。古いapi verisonをターゲットにしている場合は、ライブラリにandroid-support-v4.jarが含まれていることを確認してください。 – Mike

+0

ありがとう。 – super

関連する問題