2011-05-16 38 views
1

朋友,如何從應用程序類中提高接口?

我是從應用程序的onCreate()

運行的異步任務,現在我想提出這個任務完成的接口,並實現它的活動B.

任何一個指導我如何爲了達成這個?

我的接口

public interface IBanksLoader 
{ 
    public void OnBankLoadingComplete(boolean complete); 
} 

在應用程序類

AsyncTask 
{ 

any other function(); 
// to raise it here 
} 


Activity b 
{ 

// implement it here to get result. 
} 

任何幫助,將不勝感激。

+1

你說的 「養接口」 是什麼意思? – Stephan 2011-05-16 09:39:39

回答

0

您可以使用observer pattern來實現此行爲。

活動B將執行IBanksLoader(觀察者)接口並將其自身註冊到某個中央組件。當AsyncTask完成並調用OnBankLoadingComplete()(等同於Observer接口的notify())時,這個中心組件必須得到通知,這個觀察者是所有註冊的觀察者。

我建議使用SingletonApplication類作爲中心組件,因爲它們可以在應用程序中的任何位置輕鬆訪問,也可以從AsyncTask中訪問。

但請注意您的應用程序的生命週期。因此,您可能需要在某個時間取消註冊活動B,例如在它被破壞之前。否則,中央組件將調用OnBankLoadingComplete()方法來處理null對象,從而引發NullPointerException。

UPDATE

public class ActivityB extends Activity implements IBanksLoader { 

    public void onCreate(){   
     ... 

     MyApplication app = (MyApplication) getApplication(); 
     app.register(this); 

     ... 
    } 

    public void OnBankLoadingComplete(boolean complete){ 

     // your code here ... 
    } 

    public void onDestroy(){ 
     MyApplication app = (MyApplication) getApplication(); 
     app.unregister(this); 
    } 
} 


public class MyApplication extends Application{ 

    private List<IBanksLoader> observers = new ArrayList<IBanksLoader>(); 

    public void register(IBanksLoader observer){ 
     if(observer != null){ 
      oberservers.add(observer); 
     } 
    } 

    public void unregister(IBanksLoader observer){ 
     if(observer != null){ 
      oberservers.remove(observer); 
     } 
    } 

    public void taskfinished(){ 
     foreach(IBanksLoader bank : observers){ 
      if(bank != null){ 
       bank.OnBankLoadingComplete(true); 
      } 
     } 
    } 
} 


public class MyTask extends AsyncTask{ 
    ... 

    public void onPostExecute(){ 
     MyApplication app = (MyApplication) getApplication(); 
     app.taskfinished(); 
    } 
    ...  
} 
+0

你能否提供任何示例代碼?或簡短的想法僞代碼就像它很難理解的東西。 – UMAR 2011-05-16 09:56:50

+0

我更新了我的答案。 – Flo 2011-05-16 10:49:07