2012-01-28 22 views
1

私は、HTTPリクエストによってデータをロードまたは保存するアプリケーションを持っていますが、データはUIスレッドとやりとりする必要があります。理想的には、メッセージにIFステートメントを使用して、要求が「ロードする」か「保存する」かを判断するのが理想的です。複数のジョブのための単一のAndroidスレッド

最小限のコードでこれを行う最も簡単な方法は何ですか?

さらに、ハンドラのインスタンスは個々のスレッドで実行されますか?

EDITは:これは私が今使っているコードです:

Handler doStuff = new Handler(){ 
     @Override 
     public void handleMessage(Message msg){ 
      if(msg.what == 1){ 
       // Load all the information. 
       // Get the ID from sharedPrefs 
       SharedPreferences details= getSharedPreferences("details", 0); 
       String ID = patDetails.getString("id", "error"); 
       // Load up the ID from HTTP 
       String patInfo = httpInc.getURLContent("info.php?no="+AES.encrypt("387gk3hjbo8sgslksjho87s", ID)); 
       // Separate all the details 
       patientInfo = patInfo.split("~"); 
      } 
      if(msg.what == 2){ 
       // Save the data 
      } 
     } 
    }; 

Eclipseは、デバッグして表示を停止し、StrictMode.class

のために「ソースが見つかりません」私はそれがメインに使っているからだと仮定しますスレッドは個々のスレッドで実行されていますが、インターネットにアクセスすることはできません。

+0

あなたが試したことのコードとエラーメッセージを投稿すると役立ちます。 – dokkaebi

答えて

0

Handlers個々のスレッドで実行します。そのリンクを確認してください。 AsyncTaskもチェックしてください。

+0

私は2つの異なるメッセージを管理するハンドラーを実装しましたが、それらはメインスレッドのioexceptionであり、次にHTTP要求を実行します。 –

0

私はシングルスレッドExecutorServiceからRunnableとしてジョブを発行提案する:

public class SomeClass { 
    private ExecutorService execService = Executors.newSingleThreadExecutor(); 

    public void doSomething() { 
    final String someUiData = // retrieve data from UI 

    execService.submit(new Runnable() { 

     @Override 
     public void run() { 
     // so something time-consuming, which will be executed asynchronously from the UI thread 
     // you can also access someUiData here... 
     } 
    }); 
    } 
} 

この方法を使用すると、簡単に別の操作とExecutorService意志のために異なるRunnableを提出することができるのに対し、UIスレッドはブロックされません完全に非同期に保ちます。

編集: UIを操作する必要がある場合は、非同期になる前にその結果を保持してください。

関連する問題