開源中國 OsChina Android 用戶端源碼分析(9)下載APK功能

來源:互聯網
上載者:User

標籤:

       源碼中用以下載用戶端的類為DownloadService,是一個服務。如果你對android服務不夠理解的話,建議先查閱下有關服務的知識點。源碼分析如下:

1首先我們先來看下該服務中幾個重寫的方法:

1.1onCreate()中 首先聲明了自訂的綁定器對象,並在自訂的綁定器中添加了幾個介面可以訪問服務的方法,我們發現在這幾個方法中,目前實際用到的start()方法用以開始下載APK,其他的沒有用到。擷取通知管理器。設定服務為 非前台服務。代碼注釋中,火蟻表明了不確定性。 其實如果將服務設定為前台服務,綁定到一個通知中,那麼APP的應用的程式層級就相對較高,可以有效降低服務被殺死的可能性。本人在實際開發中就用到了前台服務。

1.2onBind()函數中擷取相關變數,返回綁定器對象。此處,可以最佳化下,既然已經自訂了綁定器,在綁定器中聲明了相關方法,我們可以將一些變數的設定放在綁定器聲明的方法中,這樣可以確保,當多個Activity與服務綁定時,方便處理,比如多個下載任務。

2定義下載線程,實現Runnable介面的方式。Runnable mdownApkRunnable = new Runnable() ;因為下載相對耗時,而服務本身又是運行在主線程中,因此用子線程專門去負責下載;

3定義了一個訊息處理器 Handler mHandler = new Handler(),當收到子線程(下載線程)發出的訊息後, 處理下載進度更新,下載完成安裝APK,取消通知的功能。

4核心下載方法downloadUpdateFile(),此方法中目前完成了基本的下載功能,如果下載半途,中斷連線的話,則下載失敗,沒有任何處理,建議在捕獲異常的情況下通過回調或者廣播通知使用者下載失敗,另外需要關閉服務。如果再強大點,就是如何?斷點續傳。 此處火蟻在子線程中,每10下做一次更新,避免頻繁更新通知的進度,過渡消耗資源。

5啟動下載服務的方法在UIHelper類中的openDownLoadService方法。此方法中用到了兩個啟動服務的方法,為什麼要用兩種呢?首先,我們要和服務通訊,利用綁定器去訪問啟動下載的方法,所有肯定要用到bindService(intent, conn, Context.BIND_AUTO_CREATE)方法,另外,使用者在介面執行完下載更新後,會可能跳轉到其他介面,也就是說當前和服務綁定的介面銷毀了,那麼他解除了和服務之間的綁定,如果只有這個介面和服務綁定了那麼介面銷毀時,意味著和服務的所有綁定解除時,服務就會執行onbind()方法,進而執行ondestroy()方法,服務銷毀,無法繼續下載。但是當用startService方法時,及時訪問者退出了訪問,但是服務仍然在運行,仍然可以繼續下載。

6其他和下載相關的一個死MainActivity中的checkUpdate(),檢查伺服器是否有更新資訊。另一個是UpdateManager類根據檢查更新的結果做相應的處理。

開源中國 OsChina Android 用戶端源碼分析(9)下載APK功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.