2016-11-19 5 views
0

私はちょうどスレッドを開始しているので、私は質問があります。この場合、doInBackground()からinitOctoshape()メソッドを呼び出すと、なぜ新しいスレッド(バックグラウンドスレッドと異なる)が作成されるのですか? Thnx!AsyncTask内の新しいスレッド

public class PlayerActivity extends CustomActivity implements 
              ProblemListener{ 

public class PlayChannel extends AsyncTask<Channel, String, String> { 
    Channel channel; 
    PlayerActivity thisActivity; 

     @Override 
     protected String doInBackground(Channel... params) { 
      Thread.currentThread().getName(); 
      channel=params[0]; 
      thisActivity=channel.thisActivity; 
      initOctoshapeSystem(thisActivity); 

     return url; 
     } 
} 


public void initOctoshapeSystem(Activity thisActivity) { 
     os = OctoStatic.create(thisActivity, thisActivity, null); 
     os.setOctoshapeSystemListener(new OctoshapeSystemListener() { 
      @Override 
      public void onConnect() { 
       Thread.currentThread().getName(); 
       mStreamPlayer = setupStream(OCTOLINK); 
       mStreamPlayer.requestPlay(); 
      } 
     }); 
} 

public StreamPlayer setupStream(final String stream) { 
    StreamPlayer sp = os.createStreamPlayer(stream); 
    sp.setListener(new StreamPlayerListener() { 
     @Override 
     public void gotUrl(String url) { 
     } 
    }); 
return sp; 
} 
} 

答えて

1

AsyncTaskdoInBackground(Params...)方法は、常にバックグラウンドスレッドで実行されます、そしてあなたは、このメソッドからinitOctoshapeSystem(thisActivity);を呼び出しているので、それはまた、このバックグラウンドスレッドで実行されます。それはAsyncTaskの動作です。僕はdoInBackgroundの方法initOctoshape()()

が誤っている

を呼び出すwhen

そう、(バックグラウンドスレッドは異なる)

newスレッド作成されますが。 initOctoshape()への呼び出しは、doInBackground()を駆動するスレッドの次にしかありません。

+0

返信用のThnx。しかし、もし私がこの行のコード 'Thread.currentThread()。getName()'をオーバーライドされたonConnect()内に置くと、それはバックグラウンドスレッドの名前とは異なる名前を提供するのでしょうか?私は自分のコードを編集しました。 – Desaretiuss

+1

'onConnect()'は 'initOctoshapeSystem()'とは別のメソッドですので、非同期で実行できます。このOctoshapeライブラリに慣れていませんが、 'OctoshapeSystem'が' onConnect() '別のスレッドで。最善の方法は、そのlibのドキュメントを参照することです。 – maciekjanusz

関連する問題