工作總結(jié)|Android N在使用JobScheduler的一點(diǎn)小問題

在之前的文章中本猿曾介紹過Android N DownloadManager中已經(jīng)采用了JobSchedule方式進(jìn)行下載任務(wù)的調(diào)度,今天就開發(fā)過程中碰到的關(guān)于JobSchedule的一點(diǎn)小坑,總結(jié)出來供大家參考分析。

想了解更多關(guān)于Android N中DownloadManager的源碼分析請點(diǎn)擊下文:

問題背景

在項(xiàng)目中,項(xiàng)目采用基于源碼修改的DownloadManager進(jìn)行下載任務(wù),而出于控制下載流量的考慮,會額外對網(wǎng)絡(luò)訪問權(quán)限進(jìn)行一定的處理。目前主要修改點(diǎn)有兩個:

  1. Helpers類中的scheduleJob方法,主要作用是通過schedule來喚起DownloadJobService,最終執(zhí)行下載操作。
  2. DownloadInfo類中的getRequiredNetworkType()方法,主要作用來返回下載任務(wù)需要的網(wǎng)絡(luò)類型。
問題描述

當(dāng)前存在的問題是對于Android 7.0的手機(jī)共享出來的熱點(diǎn),我們的下載任務(wù)一直處于等待下載狀態(tài),無法執(zhí)行。

問題結(jié)果

在前文已經(jīng)介紹過DownloadManager啟動DownloadJobService是通過Helpers.scheduleJob()方法來調(diào)度任務(wù),拉起DownloadJobService,最終完成下載功能的,
對于目前存在的問題,我們發(fā)現(xiàn)問題原因是由于scheduler.scheduleAsPackage()已經(jīng)完成了調(diào)度工作,并返回了調(diào)度值為1。但為什么沒有調(diào)用DownloadJobService呢,我們最后還是注意到我們設(shè)置的網(wǎng)絡(luò)類型:

    // We always require a network, but the type of network might be further
    // restricted based on download request or user override
    builder.setRequiredNetworkType(info.getRequiredNetworkType(info.mTotalBytes));

我們要注意到,此處setRequiredNetworkType設(shè)置了調(diào)度任務(wù)執(zhí)行需要的網(wǎng)絡(luò)類型,而當(dāng)前DonwloadInfo連接手機(jī)熱點(diǎn)獲取的網(wǎng)絡(luò)類型為WIFI,由于需求要求控制訪問網(wǎng)絡(luò)請求的原因,所以我們對于所有網(wǎng)絡(luò)類型為WIFI的網(wǎng)絡(luò),返回的類型為JobInfo.NETWORK_TYPE_UNMETERED,即只允許訪問非計(jì)費(fèi)的網(wǎng)絡(luò)。

但是對于Android6.0與7.0版本的手機(jī),開出的熱點(diǎn)識別出的NetworkInfo中mIsMetered對象為true, 而對于普通wifi中對于mIsMetered對象為false,這個標(biāo)記值是用來標(biāo)記當(dāng)前網(wǎng)絡(luò)是否為計(jì)費(fèi)網(wǎng)絡(luò)的標(biāo)記位。對于手機(jī)網(wǎng)絡(luò)的熱點(diǎn),此處他會識別為計(jì)費(fèi)的網(wǎng)絡(luò),而對于普通通過路由分出的熱點(diǎn),會識別為非計(jì)費(fèi)的網(wǎng)絡(luò),因此針對這個問題,我們將需要的網(wǎng)絡(luò)類型設(shè)置為JobInfo.NETWORK_TYPE_ANY即可正常完成調(diào)用。

問題后記

我們從這里可以看出Android系統(tǒng)設(shè)計(jì)的細(xì)膩之處,對于訪問網(wǎng)絡(luò)更強(qiáng)大的支持可以更靈活的讓我們對手機(jī)網(wǎng)絡(luò)的訪問進(jìn)行控制。

但有個最重要的事是:對于是否為手機(jī)熱點(diǎn)還不能單純的以這個字段來判斷,因?yàn)閺腎phone上開出的熱點(diǎn),當(dāng)手機(jī)讀取的時候,這個mIsMetered對象又變成了true。

所以當(dāng)有產(chǎn)品經(jīng)理問你能不能識別當(dāng)前連接的是wifi還是手機(jī)熱點(diǎn)時,千萬別急著說可以識別哦~O(∩_∩)O哈哈

大家對于Android 網(wǎng)絡(luò)請求有什么建議和見解歡迎留言指導(dǎo)~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • 艷陽之日正相逢,愛戀已生。 孤島離樹只與我相伴沉淪, 只一遭遇你終生伴首。 卻又擁你不到懷中, 信你會等我與天綢繆...
    今聿閱讀 191評論 0 0
  • 機(jī)智的禪師、人生的真諦、喋喋不休的白巖松、語重心長的李嘉誠,如果你玩過qq空間和微信朋友圈,這些玩意兒一定不會陌生...
    Doris_KK8閱讀 341評論 0 1
  • 本來我覺得,12天,能保持住狀態(tài),堅(jiān)持到高考,這一仗就打完了,落幕了。然而早上我看到了上周末文二班的周考成績(我...
    安嘉妤閱讀 395評論 0 1
  • 命運(yùn)善嫉,總吝嗇賦予人恒久的平靜,總猝不及防的把人一下子塞進(jìn)過山車,人你怎么恐懼掙扎也不肯停下來,非要把圓滿的顛簸...
    菀卿閱讀 247評論 0 0

友情鏈接更多精彩內(nèi)容