1

我有一個應該處理特定文件下載的服務類。在API Level 9+上使用DownloadManager下載文件並退回到AsyncTask <9

第一個版本是使用AsyncTask編寫的。由於它是一個大文件,通過HTTPS,使用DownloadManager會很好,因此我重構了使用DownloadManager服務的服務。

如何在構建服務類時自己使用DownloadManager(API級別> 9),並回退到AsyncTask解決方案時< 9?

+0

我會認真考慮它是否值得,編碼<= API Level 8。用戶數現在幾乎是字面上的[不存在](https://developer.android.com/about/dashboards /index.html)。 0.7%的市場份額。 – Knossos 2014-09-25 14:23:58

+0

Google Play服務甚至支持API Level 9+。我也建議你不要這樣做。 – tasomaniac 2014-09-25 14:28:19

+0

謝謝,但我們必須支持<9這個項目,恐怕。 – 2014-09-25 14:39:32

回答

0

回答我的問題,這是我做的:

  1. 建立一個抽象服務基類例如DownloadService
  2. 延伸到混凝土亞類,例如AsyncTaskDownloadServiceDownloadManagerDownloadService
  3. 創建服務時,使用功能檢測,而不是建造水平(這是更優雅對我來說)這看起來像如下:

    Activity activity = getActivity(); 
    Object downloadService = activity.getSystemService(Context.DOWNLOAD_SERVICE); 
    Class serviceClass = AsyncTaskDownloadService.class; 
    if (downloadService != null) { 
        serviceClass = DownloadManagerDownloadService.class; 
    } 
    Intent serviceIntent = new Intent(activity, serviceClass); 
    activity.startService(serviceIntent); 
    

這將使用在較老的方法在API級別< 9上,並且當> = 9時使用DownloadManager方法。

0

我怎樣才能建立一個服務類自己它使用下載管理器時 支持(API級別> 9),回落到的AsyncTask的解決方案時 < 9?

創建服務,並檢查build版本,如果它大於9運行downloadmanager其他運行asynctask

if(Build.VERSION.SDK_INT > 9){ 
    //Create your downloadmanager and its request 
}else{ 
    //start using asynctask 
} 
+0

感謝您的支持,我傾向於在可能的情況下使用功能檢測,而不是依賴構建版本。在這裏可能沒有必要,但是當試圖成爲未來的證明時,這是一個很好的做法。 此外,因爲不同的方法涉及到很多不同的代碼,我更喜歡使用兩個不同的類,並在運行時實例化正確的類,而不是每個構建版本具有許多不同代碼路徑的一個類。 – 2014-09-26 09:22:32

相關問題