2011-07-20 4 views
1

ここにシナリオがあります関数の実行が完了するのを待って結果を使用する

私はボタンとテキストビューを持つアクティビティ(A)を持っています。私は、さまざまな機能を実行するためのメソッドを持つ別のクラス(B)を持っています。クラスBのインスタンスを作成した後、ボタンがクリックされたときにそのメソッドの1つがAから呼び出されます。このメソッドは実行に時間がかかります(クラス内の別の時間のかかるプライベートメソッドを呼び出します)。クラスBのプライベートメンバーの1つの値を返します。

このメソッドは、計算後の値ではありません。関数がある時間待って計算のメンバーの値を返すように強制する方法はありますか?

public String getItem(){ 
     startFunction(); //Time consuming Function 
     generateItem(); //Function which uses results of startFunction() to generate item and set values to mItem 
     return mItem; //mItem is the private member of class B 
    } 

返される値は、常にmItemのデフォルト値、つまりコンストラクタで設定された値です。 startFunction(WiFiスキャン)がかかる時間は任意です。どんな助けでも大歓迎です。

答えて

3

クラスBのインスタンスを作成するときは、コンストラクタで引数としてContextが使用されていることを確認してください。その後、AsyncTask(あなたが知っていると仮定して)を試してみることができます。そして、doInBackground()に時間がかかる機能を入れて、onPostExecute()

+0

+1、良いアドバイスです。 – Kaj

1

Androidの開発でその値を待ち機能は、イベント駆動型である、あなたは通常、結果を待っているスレッド(少なくともないあなたのアプリケーションからメイン/ UIスレッドをブロックしてはいけません応答していないとみなされる可能性があります)。

コールバックインターフェイスを作成し、実行に時間のかかるmetodに、計算が完了したときにそのインターフェイス上のメソッドを呼び出すことをお勧めします。

Btwの投稿は、計算が既に非同期であることを示していますか?メソッドが完了すると、結果が返されます。

+0

時間のかかる機能は別のスレッドで実行されます。 – primpap

+0

あなたはUIをブロックしたくないので、結果を待つ必要はありません。アクティビティで 'AsynchTask'を使用してください。 – Kaj

関連する問題