2011-07-20 115 views
1

這裏是場景等待函數完成執行並使用結​​果

我有一個活動(A),它有一個按鈕和textview。我有另一個課程(B),有執行各種功能的方法。創建B類的實例後,單擊該按鈕時將從A調用其中一個公共方法。該方法需要一段時間才能執行(它會調用另一個耗時的私有方法),並返回B類私有成員之一的值。

問題在於該方法返回成員的初始值而不是計算後的值。有沒有辦法強制函數等待一段時間並返回計算成員的值?

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花費很長時間來執行,當計算完成時調用該接口的一個方法。

順便說一句,你的文章表明,計算已經是異步?當方法完成後,您將得到結果。

+0

是的,耗時的功能是在不同的線程中執行的。 – primpap

+0

您不想阻止用戶界面,這意味着您不想等待結果。在你的活動中使用'AsynchTask'。 – Kaj