<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                > 編寫:[kesenhoo](https://github.com/kesenhoo) - 原文:[http://developer.android.com/training/efficient-downloads/connectivity-patterns.html](http://developer.android.com/training/efficient-downloads/connectivity-patterns.html) 并不是所有的網絡類型(Wi-Fi,3G,2G,etc)對電量的消耗是同等的。不僅僅Wi-Fi電波比無線電波的耗電量要少很多,而且不同的無線電波(3G,2G,LTE……)也存在使用不同電量的區別。 ### 1)Use Wi-Fi 在大多數情況下,Wi-Fi電波會在使用相對較低的電量的情況下提供一個相對較大的帶寬。因此,我們需要爭取盡量使用Wi-Fi來傳遞數據。我們可以使用Broadcast Receiver來監聽當網絡連接狀態。當切換為Wi-Fi時,我們可以進行大量的數據傳遞操作,例如下載,執行定時的更新操作,甚至是在這個時候暫時加大更新頻率。這些內容都可以在前面的課程中找到。 ### 2)Use Greater Bandwidth to Download More Data Less Often 當通過無線電進行連接的時候,更大的帶寬通常伴隨著更多的電量消耗。這意味著LTE(一種4G網絡制式)會比3G制式消耗更多,當然比起2G更甚。 從Lesson 1我們知道了無線電狀態機是怎么回事,通常來說相對更寬的帶寬網絡制式會有更長的狀態切換時間(也就是從full power過渡到standby有更長一段時間的延遲)。同時,更高的帶寬意味著可以更大量的進行prefetch,下載更多的數據。也許這個說法不是很直觀,因為過渡的時間比較長,而過渡時間的長短我們無法控制,也就是過渡時間的電量消耗差不多是固定了,既然這樣,我們在每次傳輸會話中為了減少更新的頻率而把無線電激活的時間拉長,這樣顯的更有效率。也就是盡量一次性把事情做完,而不是斷斷續續的請求。 例如:如果LTE無線電的帶寬與電量消耗都是3G無線電的2倍,我們應該在每次會話的時候都下載4倍于3G的數據量,或者是差不多10Mb(前面文章有說明3G一般每次下載2Mb)。當然,下載到這么多數據的時候,我們需要好好考慮prefetch本地存儲的效率并且需要經常刷新預取的cache。我們可以使用connectivity manager來判斷當前激活的無線電波,并且根據不同結果來修改prefetch操作。 ~~~ ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); int PrefetchCacheSize = DEFAULT_PREFETCH_CACHE; switch (activeNetwork.getType()) { case (ConnectivityManager.TYPE_WIFI): PrefetchCacheSize = MAX_PREFETCH_CACHE; break; case (ConnectivityManager.TYPE_MOBILE): { switch (tm.getNetworkType()) { case (TelephonyManager.NETWORK_TYPE_LTE | TelephonyManager.NETWORK_TYPE_HSPAP): PrefetchCacheSize *= 4; break; case (TelephonyManager.NETWORK_TYPE_EDGE | TelephonyManager.NETWORK_TYPE_GPRS): PrefetchCacheSize /= 2; break; default: break; } break; } default: break; } ~~~ **Ps:想要最大化效率與最小化電量的消耗,需要考慮的東西太多了,通常來說,會根據app的功能需求來選擇有所側重,那么前提就是需要了解到底哪些對效率的影響比較大,這有利于我們做出最優選擇。**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看