欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

【Android Developers Training】 83. 實現高效

系統 2195 0

注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術一般,由于喜愛安卓而產生了翻譯的念頭,純屬個人興趣愛好。

原文鏈接: http://developer.android.com/training/efficient-downloads/efficient-network-access.html


在你的應用中,可能最消耗電力的就是用無線網絡對資源進行下載了。?為了最小化網絡連接對電池損耗的影響,你一定要理解你的連接模型是如何影響底層的的無線硬件的。這節課將介紹“無線網絡狀態機”并解釋你的應用連接模型如何與這個狀態機聯系起來。緊接著我們會介紹如何減少你的數據連接,使用預取( use prefetching )和捆綁傳輸( bundle )讓數據傳輸對電池壽命的影響降低到最低。


一). 無線狀態機

一個完全活躍的無線連接會顯著地消耗電量,所以它會在不同的能耗狀態間切換,這樣做的目的是在它沒有被使用時可以節省電量,同時又能保證可以在盡量短的時間內重新啟動無線電。

對于一個標準的3G無線網絡來說,它的狀態機由三個能耗狀態組成:

  1. 高能耗 :當一個連接處于活躍狀態時使用,允許設備在其最高的傳輸速率下傳輸數據。
  2. 低能耗 :一個中間的狀態,其功率損耗大致為高能耗狀態的50%。
  3. 待機 :最低的能耗狀態,這種情況下沒有活躍的或者需要的網絡連接。

雖然低能耗及待機狀態會顯著減少電量的消耗,但他們也會在網絡連接請求發起時導致巨大的延遲。從低能耗狀態回到高能耗狀態需要大約1.5秒,而從待機狀態回到高能耗狀態則需要大約2秒甚至更多的時間。

為了將延遲最小化,狀態機使用了一個延遲機制,來推遲由高能耗到低能耗這一狀態切換。圖1所示的是 AT&T對于標準3G網絡的狀態機時間參數:

圖1. 標準的3G無線網絡狀態機

每個設備上的無線狀態機,尤其是狀態切換的延遲時間(尾時間“ tail time” )以及啟動時間會隨著所采用的無線技術的不同而變化(2G,3G,LTE等),這些參數都由設備所支持的網絡運營商所定義和配置。

這節課將會講解一個具有代表性的標準3G網絡無線狀態機,它基于AT&T所提供的 數據 。然而,這一思想及實踐方法對于所有的無線網絡的實現來說也是可以應用的。

這里所使用的這一狀態機對于網頁瀏覽來說是非常有效的,因為它不會在瀏覽網頁時引入用戶無法接受的長延遲。較短的狀態切換時間也可以是的一旦一個瀏覽網頁的會話完畢了,無線網絡會轉換到低能耗狀態。

不幸的是,這種方法會導致一個現代智能手機操作系統上(如Android)的低效應用,因為應用即在前臺運行(控制延遲異常重要),也在后臺運行(對電池壽命的影響)。


二). 應用如何影響無線狀態機

每次你創建一個新的網絡連接,都會切換到高能耗狀態。在上面所說的標準3G的無線狀態機而言,它在高能耗狀態所維持的時間為:數據傳輸時間+額外的5秒切換延遲,緊接著是低能耗狀態下的12秒切換延遲。也就是說,對于一個典型的3G設備,每次數據傳輸會話將會導致無線電消耗電量的時間長達20秒左右。

在實際情況下,這意味著一個應用如果不把要傳輸的數據打包,并每隔18秒傳輸1秒的數據,那么就會然無線電一直處于活躍狀態,在它即將回到待機狀態時,又回到了高能耗狀態。它導致的結果就是:每分鐘內,會以高能耗狀態消耗電量18秒,剩下的42秒為低能耗狀態消耗電量的時間。

作為對比,同樣一個應用如果將要傳輸的數據打包,每分鐘傳輸3秒的數據,那么高能耗狀態只保持8秒,低能耗狀態只保持12秒。

上述第二個例子允許無線電在每分鐘內有40秒處于待機狀態,這回顯著減少電量的消耗。

圖2. 打包傳輸數據和不打包傳輸數據時,無線電的電量使用對比


三). 預取數據

預取數據是一種非常有效的減少獨立數據傳輸的會話數目的方法。預取允許你一次性下載在給定時間內你可能會使用的所有數據。

通過提前加載你的數據,可以減少下載數據所需要的無線連接數。與此同時,你不但節省了電量,也優化了延遲,減少了帶寬的占用并減少了下載時間。

預取也可以減少由在顯示數據時等待下載完成所造成的延遲。這可以有效提升用戶體驗。

然而,如果使用的太過度,預取也會引入過量消耗電池和帶寬使用的風險,這是因為過度預取可能會取回來一些根本不需要的數據。另外還要確保預取不會造成應用的啟動延遲,因為應用可能會等待預取結束。就實際應用而言,這意味著應該要逐步地處理數據,或者說初始化傳輸的優先級,如應用啟動時需要的數據應該優先被下載。

執行預取的程度取決于要被下載的數據規模以及數據被使用的可能性。粗略地來說,基于上述狀態機所描述的,對于當前會話中有大約50%幾率使用的數據,你可以先預取6秒鐘左右(大約1-2Mb),6秒時間的確定指的是在下載無用數據所消耗的時間和不下載這些數據所節省的時間相等時(此時預取已經無法節約時間了)。

通常來說,預取數據時,可以每2-5分鐘初始化另一個下載,來下載大約1-5Mb的數據。

遵循上述宗旨,大規模的下載——如視頻文件,應該分塊以固定時間間隔分別下載(比如每2-5分鐘下載一塊數據),僅下載極有可能在后幾分鐘會觀看的視頻數據。

注意更多下載需要打包下載,這會在下一節詳細展開,具體的實現會根據連接的類型和速度而變化,這也會在后續課程中講到。

下面看一些實際例子:

音樂播放器:

你當然可以一下子把整個專輯預取下來,然而如果用戶聽完第一首歌后就停止不聽了,那么你就消耗了大量的貸款和電池壽命。

一個更好的措施是在當前正在播放的歌曲之外,維持一個裝有凌一首歌曲的緩存。對于流媒體音樂,可以使用HTTP流來傳輸音頻,預取操作可以用上述所說的。

新聞閱讀器:

許多新聞應用會嘗試通過再一種類型的新聞被選中后,僅下載標題的方法來減少帶寬,只有在用戶選擇相應的新聞后再下載文章,只有在用戶滑動到顯示圖片的位置時再加載圖片。

通過這種方法,無線連接會一直保持活躍狀態,因為用戶會不停地在標題間切換,改變新聞類別,并且閱讀文章。不僅如此,在能耗狀態發生切換時,用于如果切換類別或閱讀文章會導致顯著的延遲。

一個更好的方法是在啟動時先預取合理數量的數據。比如開始可以先取最先的一批新聞標題和縮略圖——保證啟動的延遲時間較短——之后再陸續獲取標題和縮略圖,以及相關的正文。

還有一種做法是預取每一個標題,縮略圖,正文,甚至新聞完整的圖片——可以在后臺參照一個預定的時間表執行。但是這個方法會消耗掉大量的帶寬和電量去下載那些從來不被使用的內容,所以以這種方式實現的時候一定要格外的注意。

實現時,一種方法是僅在有Wi-Fi連接的時候,還可能是僅在設備在充電的時候執行。具體的細節在這篇文章中有闡述: Modify your Download Patterns Based on the Connectivity Type


四). 批量傳輸和連接

每一次你初始化一個連接——不論傳輸的數據量有多大——你都會導致無線電消耗大約20秒左右的電量(在使用一個標準3G無線網時)。

如果一個應用每20秒ping一次服務器,確認應用處于正在運行并對用戶可見的狀態,會導致無線電一直消耗電量,即使沒有實際的數據傳輸,也會消耗掉大量的電量。

綜上所述,打包你的數據傳輸是很重要的并創建一個帶傳輸的隊列。如果實現正確,你可以有效地在一時間窗口內進行數據傳輸,讓他們同時發生,以盡量保證數據傳輸在短時間內做完。

這背后的哲學意義便是在傳輸數據量相同的情況下,要盡量使用最少的會話數目來完成所有數據的傳輸。

所以說,你應該對于那些可以容忍有一定延遲的數據傳輸任務執行批量傳輸,同時要記得當對于時間敏感的傳輸任務需要做時,它可以具有更高的優先級去做更新或者預取等操作。計劃的更新和預取任務應該開始于你的延遲傳輸隊列。

對于一個實際的例子,讓我們回到之前預取數據中的例子。

對于一個采用了上述預取策略的新聞應用。新聞閱讀器收集并分析信息來理解其用戶的閱讀模式,并標記出用戶最喜歡的文章類型。為了保證該部分文章一直是最新的,它每隔一個小時就刷新一次。為了保留帶寬,它并不是下載每篇文章的所有圖片,而是僅下載縮略圖,并在用戶選擇了以后再下載完整的圖片。

在這個例子中,所有應用收集的分析信息被捆綁在一起,并排成隊列等待傳輸,而不是一收集到就傳輸。捆綁好的數據的傳輸時機,可以是當一副完整的圖片下載好了,或者每隔一小時的更新發生時(將數據傳輸的任務合并在一起)。

所有對時間敏感的或者點播類型的數據傳輸——比如下載一幅完整的圖片,需要優先于常規的計劃任務。計劃更新的執行時機應該是在設置好的計劃間隔時間過了之后隨著緊急的數據傳輸一起發生。這種方法通過將計劃更新和對時間敏感的下載圖片等任務捆綁在一起,來減輕執行計劃更新的代價。


五). 減少連接數

通常來說,使用已經存在的網絡連接會比重新初始化一個新的網絡連接來說更有效率。重復使用連接還能是的網絡對于擁塞和相關的網絡數據問題的響應可以更加智能。

你應該將請求捆綁到一個GET當中,而不是創建多個連接同時下載數據,或多個連接連續的發送GET請求。

例如,為每一個新聞標題生成單一的請求,并返回單一的請求或響應會比生成多個請求要好。無線需要保持活躍來傳輸端到端之間的確認接受包,所以在不用網絡連接的時候應該將其關閉,而不是讓它一直開啟并等待超時信息。

也就是說,如果過早地關閉一個連接會阻止它被重用,這就需要額外的消耗來建立新的連接。一個折中的方案是不要立即關閉這些連接,不過還是要在超時時間到之前將其關閉。


六). 使用DDMS的網絡流量工具來確定哪里可以改進

Android? DDMS (Dalvik Debug Monitor Server) 包含有一個詳細的網絡使用工具,使得其能夠在你的應用發出網絡連接請求時跟蹤網絡情況。使用這個工具,你可以監測你的應用是在何時以什么方式傳輸數據的,并可以根據監測的結果優化你的代碼實現。

圖3展示了一個每隔15秒鐘傳輸一次少量數據的場景,從中可以發現通過預取或者批量傳輸的方法可以顯著提高應用的傳輸效率:

圖3. 使用DDMS跟蹤網絡使用情況

通過監聽你的數據傳輸的頻率,以及每次傳輸數據時的數據量,之后你就能找到你的應用可以在什么地方加以改進來提高電池的使用效率。通常而言,你可以找一些可以延遲的波峰,對其進行延遲。或者將一些傳輸任務提前。

為了更好的表現出傳輸導致波峰的原因,可以使用 Traffic Stats API在一個線程內使用 TrafficStats.setThreadStatsTag() 方法,人工地標記或者取消標記某一個套接字(使用 tagSocket() 方法和 untagSocket() 方法 ),來標記數據傳輸的發生。例如:

      TrafficStats.setThreadStatsTag(0xF00D
      
        );

TrafficStats.tagSocket(outputSocket);


      
      
        //
      
      
         Transfer data using socket
      
      

TrafficStats.untagSocket(outputSocket);
    

Apache的 HttpClient URLConnection 庫可以基于當前的 getThreadStatsTag() 的值自動地為套接字做標記。這些庫還能在套接字在活動池中循環后自動地進行標記或取消標記。

      TrafficStats.setThreadStatsTag(0xF00D
      
        );


      
      
        try
      
      
         {

  
      
      
        //
      
      
         Make network request using HttpClient.execute()
      
      

} 
      
        finally
      
      
         {

  TrafficStats.clearThreadStatsTag();

}
      
    

套接字標記在Android 4.0中開始被支持,但是實時的數據顯示僅能在運行Android 4.0.3或更高版本系統的設備上被顯示。

【Android Developers Training】 83. 實現高效網絡訪問來優化下載


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成人啪精品视频免费网站软件 | 欧美一级毛片在线 | 97国产| 天天碰天天干 | 免黄网站| 国产精品1 | 一级毛片一 | 日本三级黄色片网站 | 色欲AV久久一区二区三区 | 国产免费A片好硬好爽好深小说 | 黄网站视频在线观看 | 亚洲在线播放 | 激情一区 | 人人精品 | 国产精品免费观看视频 | 国产亚洲精品久久无亚洲 | 欧美在线播放一区 | 国产成人av免费看 | 欧美日韩不卡 | 国产综合av | 成人午夜爽爽爽免费视频 | 二级黄绝大片中国免费视频 | 噜噜噜噜狠狠狠7777视频 | 久久狠狠一本精品综合网 | 天天草夜夜操 | 亚洲一区二区在线 | 自拍偷拍第一页 | 国产++欧洲韩国野花视频 | 亚洲一二三区在线观看 | 激情丁香六月 | 日本道在线视频 | 久久精品久久久 | 日本高清中文字幕一区二区三区 | 国产91久久精品一区二区 | 欧美一级二级三级视频 | 日本欧美一二三区色视频 | 成人av网站在线观看 | 欧美色欧美亚洲高清在线视频 | 日韩第3页| 欧洲色吧| 精品麻豆cm视频在线看 |