安卓開發:談談JobInfo中的設備空閒約束以及探討如何測試此方法

2020-12-17 AI互聯社

今天早上特地來公司早了一個小時,趕緊把昨天沒說完的關於JobInfo中的幾個約束條件結束掉,儘管時間緊張閱讀量也不怎麼可觀,但是還是不能斷是吧,萬一真的有哪位同學就等著講完約束條件呢?況且才更新了幾天安卓技術類文章自己都養成習慣了。

好吧,開場白就講到這裡,如果你是一位安卓開發者正好手頭上有兩三分鐘的空閒時間那麼就可以繼續看下去了。

在上一章節《安卓程式設計師:低電量如何做優化?這兩個方法或許可以幫到你》我們講到了與低電量優化的兩個約束,那麼今天來講講設備空閒約束。

那麼什麼是設備空閒約束呢?其實「空閒」這兩個字聽起來就給人一種模稜兩可的感覺,按照通常的理解以及我們看過了Android 6.0 (API level 23)關於device idle和doze介紹後,大部分開發者可能覺得設備長時間沒操作屏幕自然進入鎖屏狀態時就可以稱為空閒了,在這種狀態下網絡請求或者一些後臺可能會受到限制。

但是今天我們要說的空閒與上面提到的doze可能有點不一樣,JobInfo條件約束中的空閒只限定用戶在某一段時間有沒有與設備交互,至於這個時間是多少是由系統控制。

講了這麼多,還沒有說到具體的方法是什麼,這個方法就是requiresDeviceIdle,參數就一個布爾型,默認值false表示無論設備是否空閒都會執行具體的任務。

那麼什麼情況下會傳true呢?按照官網的解釋,系統處於空閒狀態時是一個處理比較耗系統資源任務的最好時機,比如說大量的IO處理或者繁雜的計算操作。Android認為如果應用中有這類操作並且這類操作是可以在後臺執行的話那麼requiresDeviceIdle(true)就是一個比較合理的方式了。

最後來說說這個方法的測試,在JobInfo中就數這個方法最難測試。從官網的說明來看,添加這個約束後只要在一段時間內用戶沒有與設備發生交互那麼條件就會滿足,意味著任務能夠被執行。然而,經測試後(pixe & android p)並沒有達到期望,並且國外安卓開發者也反映等了幾個小時也沒有看到任務執行。

甚至有安卓開發者通過shell命令讓設備進入doze模式,發現仍然沒有起作用。其實在Android 6.0中引入doze概念時也對設備進入doze狀態時的限制活動作了說明,最後一條明確寫到了doze狀態不允許JobScheduler運行,所以通過這一點來測試requiresDeviceIdle方法也走不通。

不過分析JobSchedulerService源碼可知,處理空閒約束的類是IdleController,其中有一個叫做IdlenessTracker的內部類,該類繼承BroadcastReceiver,負責監聽以下幾個與設備空閒相關事件。

當事件狀態發生變化後執行下面這段邏輯,滿足if判斷後才開始把任務交給AlarmManager執行。令人遺憾的是,仔細分析源碼筆者仍然未能觸發設備空閒狀態。

由於時間有限未能對這塊做仔細地研究,後面有空時會加以補充,如果哪位同僚知曉請予以告知。

相關焦點

  • 安卓開發:JobService中的兩個返回值,讓多少安卓程式設計師頭暈轉向
    前面幾個章節我們把JobInfo中的幾個約束條件都講完了,其實JobScheduler模塊還有一個難點或者說讓不少安卓程式設計師直接頭暈轉向的一點,那就JobService的兩個返回值。在安卓開發過程中,經常會冒出幾個令為難以捉摸的返回值。
  • 夜神安卓模擬器:安卓環境開發、測試三步搞定
    另外,夜神安卓模擬器不但可以為遊戲開發者輕鬆搭建安卓開發環境,還可以為其提供相應功能的場景測試,比如:夜神安卓模擬器自身提供的測試場景通過adb我們可以在Eclipse中方便通過DDMS來調試安卓程序。當我們運行Eclipse等開發平臺時adb進程就會自動運行。adb可以直接操作管理安卓模擬器或者真實的安卓手機。
  • 安卓開發測試小工具-adb
    ADB的組成客戶端(Client):可對安卓應用進行安裝、卸載和調試服務端(Service):管理客戶端到安卓設備應用的後臺adb進程。2、配置環境變量,將tools目錄和platform-tools目錄配置到系統變量PATH中。ANDROID_HOME是SDK的路徑。
  • 屏障定時器流程測試方法以及使用此方法
    打開APP 屏障定時器流程測試方法以及使用此方法 FPGA開發圈 發表於 2020-06-09 14:51:12 本篇博文提供了一種屏障定時器流程測試方法以及使用此方法時可能出現問題。 屏障定時器流程測試方法多種多樣,包括以下 2 種方法: 移除鏡像末尾部分 嘗試破壞同步 (Sync) 字 對於選項 1(刪除鏡像末尾部分),可觀察到由於超時錯誤導致的回退。 但使用選項 2(破壞同步字)時則可能出現問題。
  • 安卓10源碼開發定製(21)GPS定位研究(3)修改GPS定位數據測試app gps定位代碼
    一、測試gps定位功能的方法探討     在安卓App gps定位開發過程中,往往需要進行GPS定位的測試。
  • 資料庫開發-SQL Server中Check約束如何使用實例解析
    實例目的使用Check約束,來限制學生表中的年齡在1到100歲之間。小於1或大於100的數值在學生表中不讓保存。下面演示如何實現:創建表CHECK(AGE>='0' AND AGE<='100') --指定check約束範圍測試數據1、向表插入測試數據insert into STUDENT(name,age,addrss) values('毛喜','101
  • 教程| 如何用TensorFlow在安卓設備上實現深度學習推斷
    例如,我們可以在本地設備上將圖像或語音數據預處理為壓縮表示,然後將其發送到雲。這種方法解決了隱私和延遲問題。在 Insight 任職期間,我用 TensorFlow 在安卓上部署了一個預訓練的 WaveNet 模型。我的目標是探索將深度學習模型部署到設備上並使之工作的工程挑戰!這篇文章簡要介紹了如何用 TensorFlow 在安卓上構建一個通用的語音到文本識別應用程式。
  • 安卓自定義,如何恢復安卓設備的出廠設置及備份
    這是一個初學者的任務,小編將在這篇文章中教你如何在Android設備上執行恢復出廠設置。而且不僅僅是直接恢復出廠設置,小編還會先介紹一些在擦除之前備份數據的最佳做法,以及一些其他提示,以幫助儘快恢復從重置中恢復。如果您正在尋找恢復出廠設置以修復設備的問題,您可以在沒有恢復出廠設置的情況下修復設備。
  • 荒野亂鬥安卓安裝方法 安卓怎麼安裝
    今天為大家帶來的是荒野亂鬥安卓安裝方法,安卓怎麼安裝?一些玩家不知道安卓怎麼玩荒野亂鬥,這裡有一些教程,感興趣的小夥伴一起來看看吧。
  • 科技:如何在安卓設備上運行雙重WhatsApp
    導語:如果你不知道如何在Android上運行WhatsApp的兩個帳戶,也不要難過,關於WhatsApp,人們經常問的問題之一是,如何在一部手機上運行兩個WhatsApp帳戶,或者如何在一部手機上使用兩個WhatsApp ?以下是如何在安卓手機上安裝雙WhatsApp的完整指南。
  • 谷歌Fuchsia OS 進入開發者測試階段,它真的會代替安卓嗎?
    在預想中,這個「通用」的作業系統能夠無縫運行於所有平臺,如智能設備、平板電腦和智慧型手機。一些人認為它可能是 Android 的終結者。在這篇文章中,我們來深入了解一下這個被稱為「Fuchsia」的作業系統,並討論它是否真的能替代安卓。
  • 如何為安卓構建一個自定義鍵盤,教程在這裡
    無論您是想將安卓自定義提升到一個新的水平,還是想要以全新的方式與智能設備進行互動,請繼續閱讀,然後探討如何創建安卓鍵盤。注意: 這個項目相對簡單,主要需要複製和編寫XML腳本。但是,它確實包含一些更高級的概念,如服務和繼承。如果您樂意跟隨鍵盤運行,那麼任何人都應該能夠重現應用程式。如果你想了解一切都做了什麼,這是一個很好的中間項目。
  • 學習安卓開發[2]-在Activity中託管Fragment
    在上一篇學習安卓開發[1]-程序結構、Activity生命周期及頁面通信中,學習了Activity的一些基礎應用,基於這些知識,可以構建一些簡單的APP了,但這還遠遠不夠,本節會學習如何使用Activity託管Fragment的方式來進行開發
  • 近千家知名網際網路企業匯聚首屆安卓綠色聯盟開發者大會 共議安卓新...
    而在本次安卓綠色聯盟首屆開發者大會中,針對「應用設計開發、前沿技術創新及應用分發」等主題深入交流與探索。面向未來,安卓綠色聯盟亦將竭盡全力,與廣大開發者夥伴一起共築中國安卓綠色應用生態。」  大會以高效應用開發、應用創新體驗、自動化測試三個篇章與會開發者深入分享,接下來,就讓我們一起來看看,在這場聚焦安卓應用現狀與未來的開發者大會中,安卓綠色聯盟都邀請了哪些重磅嘉賓,而這些重磅嘉賓又發表了哪些精彩觀點吧。
  • 微信小程序框架(WMPF)發布:可脫離微信客戶端,支持安卓設備
    第二步:體驗產品 進入「微信小程序框架-產品使用指引」 下載測試Demo,將Demo安裝到安卓設備中,即可在你的硬體設備中體驗WMPF能力。  第三步:開通功能 若需正式使用,請點擊「申請開通」,審核通過後即可綁定需正式在硬體運行的小程序。  第四步:註冊設備  只有通過平臺鑑權的設備才可運行WMPF。
  • 移動App測試中的最佳做法
    每項開發的新功能都需要進行測試。移動app測試中功能測試是一個重要方面,移動測試員應該要進行手動測試和自動化測試。剛開始測試時,測試員必須把 移動app  當做「黑盒」一樣進行手動測試,看看提供的功能是否正確並如設計的一樣正常運作。除了經典軟體測試,像點擊按鈕看看會發生什麼,測試員還必須執行更多功能 的行動裝置專門的測試。
  • 【推薦】移動App測試中的最佳做法
    作為一名敏捷軟體開發團隊的軟體質量保證經理,我一心投入iPhone, Android, Windows Phone 7的移動apps和移動web apps。在XING移動團隊的日常工作以及與其他移動測試專家交流的過程中,我深刻了解了移動測試工作的困難。漸漸地,我明確了什麼是幫助改進同事們和我的測試工作並為用戶提供更高質量app的移動最佳做法。
  • 安卓應用開發頂級框架大盤點,總有一款適合你
    藉助它,你可以利用設備的硬體功能,包括麥克風、攝像頭和傳感器。這可以通過直接訪問平臺組件來實現。原生開發工具包原生開發工具包,或者叫NDK,被認為是最好的安卓框架之一。它使得開發人員可以使用C和C++來為安卓設備編寫代碼。它很少用於整個項目。開發人員在必須處理應用程式中的性能問題時經常使用它。
  • 波分復用系統的光信噪比與代價測試方法探討
    摘要:本文通過分析光放大器噪聲的成分,指出了波分系統中在OSNR表象一致的情況下光放大噪聲與ASE噪聲的差異,以及這種差異在檢測系統傳輸性能時所造成的影響,並設計了相關的代價測試實驗系統。通過對實驗數據的分析,指出了進行與系統OSNR代價相關的性能測試時如何獲得真實系統參數的辦法。
  • 騰訊IOT安卓開發初探
    目錄騰訊IOT 安卓開發初探 Tecent IOT 開發平臺的使用 新建項目創建產品添加自定義功能設備開發微信小程序配置 面板配置新建設備使用設備安卓開發 前置配置 data.jsonapp-config.json權限配置連接平臺代碼安卓頁面配置Activity代碼微信小程序使用總結 參考騰訊IOT