2012-03-26 67 views
0

簡介:我有3個活動,DashBoardFeedEvents。 DashBoard是應用程序啓動時啓動的。從那裏用戶可以轉到Feed或活動。不同活動訪問的獨立下載程序類別(單獨的線程)

問題:我想在啓動DashBoard時啓動下載(當然,在單獨的線程中)。從那裏用戶可以轉到FeedEvents,並且下載將在進行中或已經完成。應該通知活動FeedEvent(在實例中合適),通知下載完成並且數據可用。什麼是完成這個最好的方法?

我的當前代碼:我有一個下載類DownloadHandler,它由DashBoard活動啓動。該課程在單獨的線程下載。該類跟蹤一個名爲completed的布爾值。它被實例化爲false,當下載完成時,它被更改爲true

當前我的類FeedEvents將在一個單獨的線程中每隔100ms輪詢變量completed,以便它不會阻塞UI線程。當completed變量變爲true時,它調用該特定類中的函數,該函數然後向DataHandler類查詢下載的數據。


這是行不通的,但我覺得我的邏輯有點混亂,而且必須有更好的方法來做到這一點。因爲我使用兩個單獨的線程,一個用於下載,一個用於輪詢已完成的變量。有一個更好的方法嗎?

我已閱讀AsyncTask和不同的回調,但問題是我無法在特定的類中指定回調。因爲當下載完成時,當前活動可能是DashBoardEventsFeeds。無法保證下載完成時哪些活動會在前面。

+1

https://github.com/rajeshcp/Android-Download-Manager,看到這個基本上這是一個單一的類(DownloadManager),它會照顧你的應用程序內所有的http調用,你可以看看這,這是我在我的許多應用程序中使用的相同的東西,謝謝 – Triode 2012-03-26 15:03:50

+0

恐怕下載管理器類不是我所需要的。我已經有一個有效的下載管理員課程。我只需要它能夠根據哪個活動打開 – 2012-03-26 16:04:41

回答

1

我會在我的下載線程中啓動一個廣播(爲此設置一個intentfilter)並在Feeds和Events中註冊接收器(不要忘記在onStop()中取消註冊它們)。 我經常使用這個解決方案來達到這個目的 - 它很簡單,並且做得很好。

BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      // TODO Auto-generated method stub 
     } 
}; 

你應該自己解決其餘的問題:)沒有那麼難。有很多內容,或購買一個標準的書來獲得Android。

+0

聽起來是個不錯的主意就可以完成回調功能。你能給我一些代碼示例嗎?只是一個概述。如何在事件和饋送中特別註冊廣播接收者。因爲我在互聯網上看到的所有例子都使用一個單獨的BroadcastReciever類。 – 2012-03-26 16:37:03

+0

因爲昨天被接受爲答案...一個更智能的解決方案將是一個抽象類,擴展這個抽象類的活動和Feed和Events。在下載線程中設置一個監聽器,並在抽象活動的onStart中註冊一個監聽器(不要忘記在onPause中取消註冊)會做出明智的工作。 但廣播方法也做得很好,並且具有活動不必知道關於下載線程的生命週期的一些優點的優點。 – 2013-02-28 22:25:43

+0

是的。實際上,我帶着一個子俱樂部模式與活動和單身下載課程一起進行。這與你所說的完全相同。 – 2013-03-01 17:28:13