2012-01-11 14 views
1

私は基本的にWebコンテンツプロバイダの音楽プレーヤーを実装するアンドロイドアプリを構築しています。 一言で言えば、私はプレイ、「ポーズ」、「ストップ」のプレイを持つプレイヤーを持っています。同時に私は、新しいスレッドを使用してシークバーの進行状況情報を提供しています。また、textViewには長さと再生時間が表示されます。Androidスレッドの質問

スレッディングに関する最善のアドバイスをお願いしたいと思います。一時停止を押すとスレッドを一時停止し、停止ボタンを押すと停止し、再生を押すと再開/開始します。

私はこのようなものがあります:

Thread thread = new Thread(new Runnable() 
{ 
    public void run() 
    { 
     while(!finished && !stopped) 
     {//Do some action on Views...}} 

をそして、私は私のアプリを離れる際にそうであっても、スレッドは完全に死んでいるだろうか?それはまだ実行されませんか?

大変ありがとうございました。これが他の場所で回答された場合はごめんなさい。

+0

に役立ちますように。 – lv0gun9

+0

私はスレッドを停止する唯一の方法は、条件にブール値を設定することだと思います。また、アプリケーションを終了し、この論理値をonActivityDestroyに設定します。また、私はそれがスレッドを一時停止することはできないと仮定することができます。音楽の一時停止は、スレッドを一時停止しません。しかし、すべてのケアが適切に処理されていると仮定すると、その状態のおかげでスレッドはいつか停止する必要があります。 –

+0

これをあなたのonDestroyに試してください。 finish(); android.os.Process.killProcess(android.os.Process.myPid()); – lv0gun9

答えて

2

私はmediaPlayerDemoでHandler + Broadcastを使用しています。 MediaPlayerはサービスで実行され、handler.post(実行可能)を使用してサークルを作成します。 RunnableをI sendBroadcast()で と(mp.isPlaying){}が消費を避けるためにする場合は、この 気に入りまし活動におけるonReceive

public void sendToUpdate() { 
    // handler 
    if (progressHandler == null) { 
     progressHandler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
       super.handleMessage(msg); 
      } 
     }; 
    } 
    progressHandler.removeCallbacks(progress); 
    progressHandler.post(progress); 
} 

Runnable progress = new Runnable() { 
    @Override 
    public void run() { 
     if (mp != null) { 
      musicCurrentTime = mp.getCurrentPosition(); 
      musicLength = mp.getDuration(); 
      Intent intent = new Intent(); 
      intent 
        .setAction("com.cookie.media.MUSIC_UPDATE"); 
      intent.putExtra("musicCurrentTime", musicCurrentTime); 
      intent.putExtra("musicId", musicId); 
      intent.putExtra("musicLength", musicLength); 
      sendBroadcast(intent); 
     } 
     progressHandler.removeCallbacks(progress); 
     progressHandler.postDelayed(progress, 1000); 
    } 
}; 

あなたはを追加することができたときのTextViewを変更したときにメディアプレーヤの一時停止または停止します。