您可以使用observer pattern來實現此行爲。
活動B將執行IBanksLoader(觀察者)接口並將其自身註冊到某個中央組件。當AsyncTask完成並調用OnBankLoadingComplete()(等同於Observer接口的notify())時,這個中心組件必須得到通知,這個觀察者是所有註冊的觀察者。
我建議使用Singleton或Application類作爲中心組件,因爲它們可以在應用程序中的任何位置輕鬆訪問,也可以從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();
}
...
}
來源
2011-05-16 09:45:24
Flo
你說的 「養接口」 是什麼意思? – Stephan 2011-05-16 09:39:39