java实现断点续传_Android 强升逻辑和实现
作者:愛好裝逼的 梁飛
“強制升級”會中斷用戶操作,阻礙正常使用,看似是一個不光彩的行為,但是智者千慮必有一失,我們無法保證 App 的正確性,在某些緊急情況下,強制升級還是非常必要的,而且接入的時間越早越好。
有贊微商城 App 早期版本只提供了一個更新提示的對話框,并不會強制用戶更新。隨著后端網關升級,一些老的服務需要下線,但是新版本到達率并不理想,繼續維護老接口帶來一定成本,而且新功能也無法觸及用戶。
為了提升版本到達率,我們重新梳理了強制升級的邏輯。
升級過程中首先要保證 apk 的下載成功率,下載完成之后要及時彈出安裝頁面,為了防止下載失敗,也要提供市場下載的選項,這樣一定程度上也能保證升級之后渠道的一致性。
- 更新對話框需要展示標題、內容和動作按鈕。
- 狀態欄下載通知需要展示應用名字和描述。
構造參數
業務方需要提供的參數:
public使用 DownloadManager 下載 apk
為了提高下載成功率,我們使用了系統 Service - DownloadManager,因為是獨立進程,不會增加 App 占用的系統開銷。
如果 DownloadManager 被系統禁用,那直接跳轉到瀏覽器去下載。
private注冊監聽下載完成的 Receiver
我們通過一個全局的 Receiver 來接收下載完成的廣播,這樣即使 App 進程被殺死,依然可以彈出安裝界面。
<receiver接收到廣播之后,彈出安裝界面。
private注意此處有坑,在 SDK >= 24 的系統中,Intent 不允許攜帶 file:// 格式的數據,只能通過 provider 的形式共享數據。
所以我們還需要注冊一個 FileProvider。
FileProvider 在 Android N 上的應用?zhuanlan.zhihu.com<provider${applicationId}$ 是 AndroidManifest.xml 中的占位符,gradle 會進行替換。
android:authorities="${applicationId}.provider"對應 Java 代碼:
FileProvider注意:Java 代碼中 getPackageName() 的返回值是 ApplicationId,具體可參考 ApplicationId 與 PackageName 的區別。
完整版代碼:LyndonChin/ZanAppUpdater
原文鏈接:Android 強升邏輯和實現
iOS/Android 開發可投簡歷至 liangfei@youzan.com(微信:feelang )
總結
以上是生活随笔為你收集整理的java实现断点续传_Android 强升逻辑和实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java replaceall正则表达式
- 下一篇: android sina oauth2.