2014-02-08 60 views
0

我有一種情況,我有多個活動處理單個全局對象列表。在另一個活動中啓動asynctask後刷新當前視圖

從活動A中,我可以啓動一個asynctask,它發送一個HTTP Get請求來檢索XML消息,然後將XML文件解析爲一系列對象。

我的目標是隻有在底層數據結構發生變化時才能刷新所有視圖。

這應該是理想的意思,我可以啓動活動A,調用一個asynctask,移動到活動B,C D等等,當異步完成時(不管我在做什麼活動),當前視圖應該被更新。

我已經看過廣播聽衆,但我不知道我在正確的方向與此,是否有可能有人解釋,如果這是可能的?

感謝

+0

你不應該在這裏使用'AsyncTask',因爲你沒有在'Activity'中完成。您可能想使用[服務](http://developer.android.com/guide/components/services.html) – codeMagic

回答

0

由於AsyncTask情況取決於呼叫者Activity,我認爲這是不正確的做法。在你的情況,因爲你需要在任何Activity恢復結果,我會使用一個未綁定的Service,所以它可能會隨時隨地訪問,無論你想要的。

您也可以使用本地BroadcastReceiver這將發出一個信號給所有Activity S和,註冊者發送的動作你AsyncTask/Service,將執行可能需要採取必要的行動。請注意,您的Activity尚未啓動,顯然Activity將無法​​處理您發送的內容,因爲該接收器應該未註冊。

0

只需發佈一個可運行到當前活動的處理程序。

你的活動可以實現一個通用接口,其中函數「updateUI」或其他任何存在,並且這樣你的runnable可以是一行,並且對於當前活動實例是不可知的。

正如您可能知道的那樣,asynctask的postexecute部分在啓動它的活動的UI線程上運行。由於該活動可能已經失效,只需將其發佈到異步任務的「doinbackground」部分中的處理程序中,並將其保留爲空白即可。

interface Updateable{ 

public Handler getHandler(); 
public void updateUI(); 

} 

From Async Thread 

final Updateable curr_activity = ... 
Handler handle = curr_activity.getHandler(); 


    handle.post(new Runnable() { 

     @Override 
     public void run() { 

      curr_activity.updateUI(); 

     } 
    });