2012-04-24 10 views
1

私はいくつかの方法で主な活動をしています。Androidでのスレッドの適切な使い方は何ですか?

  • GetTopics:
  • BindTopicsを結果のREST APIを呼び出して、JSONを返す:画面上GetTopicsからの結果を表示する

あり、同様の機能を持ついくつかの他の人がいるが、私は私ができると確信していますすべての方法でこれらにソリューションを適合させます。

質問:別のスレッドでこれらを実行する適切な方法は何ですか?両方とも同じスレッドにする必要がありますか? GetTopicsが完成したらBindTopicsを呼び出す必要がありますか?

どちらの方法でも、非同期スレッドが完了する前にUIが構築されないのですか?もしそうなら、私はどのようにUIを更新するのですか?

何か助けていただければ幸いです。

答えて

1

AsyncTaskを使用して進捗ダイアログでロードします。 UIスレッドのコントロールを更新するには、ハンドラを宣言する必要があります。

例:私のアプリは、FTPサーバーから大量のデータをダウンロードするために持っていたとき

private Handler  handler   = new Handler(); 


final ProgressDialog pd = new ProgressDialog(this); 
pd.setTitle("Getting topics.."); 
pd.setMessage("Please while topics are retrieved"); 
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
pd.setIndeterminate(true); 

new AsyncTask<Void, Void, Void>() { 

    @Override 
    protected Void doInBackground(Void... params) { 

     GetTopics(); 

     return null; 
    } 

    @Override 
    protected void onPreExecute() { 

     pd.show(); 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     BindTopics(); 

     pd.dismiss(); 

     handler.post(new Runnable() { 

      public void run() { 
       // update UI 
       // remove loading view 
       // load details of topics 
      } 
     }); 
     super.onPostExecute(result); 
    } 

}.execute(); 
3

すべてのご質問への答えは、あなたがデータをダウンロードし、それを表示するためのAsyncTaskを開始し、その後、(ロード画面のいくつかの並べ替えを)あなたのUIを作成したいAsyncTask

1

です。

ここAsyncTasksに関する基本的なブログの記事があります:あなたはGetTopicsを呼ぶだろうAsyncTasks doInBackgroundメソッドでhttp://android-developers.blogspot.co.uk/2009/05/painless-threading.html

。次に、onPostExecuteメソッドでBindTopicsを呼び出し、データを表示します。 onPostExecuteメソッドでは、データを表示しようとする前に、データが正しくダウンロードされているかどうかを確認できます。

+0

これはまさに私が必要としていたものです!どうもありがとうございました。 – alockrem

0

私のためのスレッドの主な用途でした。しかし、ダウンロード中に私はユーザーがまだ私のアプリを使用できるようにしたかった。メインスレッドでダウンロードコードを書いた場合、ユーザーはアプリを使用できず、すべてのボタンは機能しません。スレッドの主な考え方は、各スレッドのCPU使用時間を分割することです。

複数のタスクを同時に実行したい場合は、スレッドを使用する必要があります。

関連する問題