2012-02-26 22 views
1

私はAndroid UIスレッドで作業しています.1つの時間がかかる作業があるので、別のスレッドに入れます。 2つの事は私はありたい:Java Android:1つのスレッドから別のスレッドにデータを送信

1)このサブスレッドの実行後に、UIスレッドがこのworkAは、サブスレッドで作成するいくつかのデータがかかります)

2 workA

を行うために開始します。

ここに私の解決策:

Car car;  
public void onResume(){ 
     super.onResume(); 
     Thread t = new Thread(){ 
       car = new Car(); 
       car.takePetrol; //take car full petrol 
      } 
     }); 

     t.join(); 
     count_How_far_Car_can_go(car.getPetrol);   

}

私のコードに問題がある:私は(使用t.joinを持っています)。スレッドtの終了を待つ。そして、これはUIスレッドを "ブロック"します。もちろん、それは私が望むものではありません。私の問題のための別の解決策を持っている

(私はUIスレッドがまだスムーズに作業できるように、別のスレッドを作成するため)、私を助けてください:)

感謝を:)

+0

そして、私はまだStackOverFlowコミュニティを信頼しています... – hqt

+1

以下の答えは、GUIスレッドとやりとりするためのいくつかの方法が必要な場合、AsyncTaskと一緒に行く方法と思われます。私は個人的に標準のJavaスレッドを使い、Producer-Mediator-Consumerモデルを使ってGUIや他のスレッドとの間でメッセージをやりとりします。 http://jaiswaltraining.com/DesignPatterns/ch13.php – JPM

答えて

3

パッケージからAsyncTaskクラスを確認してください。

EDIT:すみません、申し訳ありません。 OPのニーズに合わせて改善しました。

private class MyTask extends AsyncTask<Void, Void, Car> { 
     @Override 
     protected Car doInBackground() { 
      // Create your Car here 
      return car; 
     } 

     @Override 
     protected void onPostExecute(Car car) { 
      // This will be executed on UI thread after completion 
     } 
} 

そしてこの

MyTask task = new MyTask(); 
task.execute(); 

のようにそれをトリガーし、あなたのAsyncTaskにパラメータを渡す必要がある場合は、クラス定義に、あなたのパラメータオブジェクトを追加することができ、そして、あなたのタスクを実行しながら、もちろん、あなたのパラメータオブジェクトを渡します。パラメータ付き

private class MyTaskWithParams extends AsyncTask<String, Void, Car> { 
     @Override 
     protected Car doInBackground(String parameter) { 
      // Create your Car using the String you passed 
      return car; 
     } 

     @Override 
     protected void onPostExecute(Car car) { 
      // This will be executed on UI thread after completion 
     } 
} 

が定義に追加、あなたは

MyTask2 task2 = new MyTask2(); 
task2.execute("SomethingSomething"); 
+1

真剣に?このサンプルコードは、OPが求めていることと何が関係していますか?彼らがこれまでに 'AsyncTask'を使ったことがないのであれば、事を混乱させるだけです。少なくとも、彼らがしようとしていることと関連があるAsyncTaskの例を与えてください。 – Squonk

+1

@MisterSquonk厄介なコピー貼り付けには申し訳ありません。私は理解できる方法で私の答えを改善しました。 –

+1

ああありがとうございます:)あなたが編集する前に、私は長い投稿を読んで、理解しがたいものでなければなりません!この後、私は再びその記事を読んだ。 – hqt

1

AsyncTaskを使用して置きます...

car = new Car(); 
car.takePetrol; //take car full petrol 

... doInBackgroundへの方法。それが完了すると、onPostExecuteメソッドが呼び出され、そこで 'workA'を実行できます。

0

ConditionVariable & ExecutorServiceでインスタンス化する必要があり、このシーンのために、より適しています。 see here for android blog

関連する問題