多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android官方開發文檔Training系列課程中文版:電池續航時間優化之監測電池電量及充電狀態

Android官方開發文檔Training系列課程中文版:電池續航時間優化之監測電池電量及充電狀態

來源:程序員人生   發布時間:2016-11-21 08:35:53 閱讀次數:2548次

原文地址:http://android.xsoftlab.net/training/monitoring-device-state/index.html

引言

作為1款優秀的APP利用,應當總是千方百計的下降電量的消耗。通過這節課的學習,你將有能力使APP可以基于裝備的狀態來調劑APP的功能及行動。

我們可以通過比如在斷開連接時關閉后臺服務,或在電量低的時候下降更新的頻率等等手段來下降電量的消耗。

監測電池電量及充電狀態

在更改后臺的更新頻次時,檢查當前的電池電量及充電狀態是我們先要做的。

利用程序的更新頻率取決于電池的電量和充電狀態。由于裝備處于充電狀態時利用的耗電量幾近可以疏忽,所以,在裝備連接到充電器時,你可以將利用的刷新頻率開到最大,如果裝備沒有在充電,那末下降更新頻率可以延長電池的使命時間。

檢查當前的充電狀態

首先我們需要檢查當前的充電狀態。BatteryManager會將電池信息和充電信息通過粘性Intent將其廣播。

由于是粘性Intent,所以不需要注冊BroadcastReceiver,只需要在調用registerReceiver()時傳1個null就能夠,當前的電池狀態由該方法直接返回。你也能夠在這里傳遞1個BroadcastReceiver對象,但是我們接下來的處理方式其實不是在其中做的,所以這其實不是必須的。

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent batteryStatus = context.registerReceiver(null, ifilter);

如果裝備當前處于充電狀態,那末可以取得當前的充電狀態,不管它是通過USB還是通過AC適配器充電的。

// Are we charging / charged? int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; // How are we charging? int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

通常的做法是:應當是在連接到AC電源適配器時,將后臺的更新頻率加到最大,如果當前處于USB狀態,這個頻率應當適當下降,如果斷開充電,則應當進1步下降。

監測充電狀態的變化

裝備的充電狀態很容易隨著充電器的插入、拔出而產生變化。所以隨著充電狀態的變化應當相應的調劑利用的刷新頻率。

當裝備插上充電器或是拔出充電器時,BatteryManager都會廣播1個Action,所以應當注冊1個BroadcastReceiver用來監聽這些事件。在清單文件中需要定義ACTION_POWER_CONNECTED及ACTION_POWER_DISCONNECTED的意圖過濾器。

<receiver android:name=".PowerConnectionReceiver"> <intent-filter> <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/> </intent-filter> </receiver>

在該BroadcastReceiver內,你可以獲得當前的充電狀態:

public class PowerConnectionReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; } }

檢查電池的剩余電量

在1些情況下還需要檢查裝備的剩余電量。當電量較低時可能需要下降利用的后臺服務頻率。

你可以通過以下方式取得裝備的剩余電量:

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level / (float)scale;

監測電量的重要變化

利用不能1直連續不斷的監聽電池的狀態。

通常來講,1直不斷的監聽電池電量會使監聽電池的任務大于利用的實際任務,所以最好是只監聽1些比較重要的變更事件。

下面的清單文件摘自1段廣播接收器內。該廣播接收器會在電池的電量很低時或是在電量恢復到安全水平時被觸發。它監聽了兩個事件:ACTION_BATTERY_LOW及ACTION_BATTERY_OKAY.

<receiver android:name=".BatteryLevelReceiver"> <intent-filter> <action android:name="android.intent.action.ACTION_BATTERY_LOW"/> <action android:name="android.intent.action.ACTION_BATTERY_OKAY"/> </intent-filter> </receiver>

通常情況下,在電量很低時要關閉所有的后臺更新。加載在使用APP之前,手機關機了,那末利用的數據是不是是最新的就沒那末重要了。

在很多情況下,手機充電時是被放在1個固定的位置上的。下節課我們將會學習如何檢查裝備的放置環境和如何監測裝備的放置狀態。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 免费国产成人高清在线观看不卡 | 69久久| 亚洲一区2区三区4区5区 | 日本xxxwww在线观看免费 | 国产午夜毛片v一区二区三区 | 中文字幕第23页 | 最新日韩欧美不卡一二三区 | 亚洲精品高清久久 | 国产精品成人免费福利 | 亚洲另类图 | 日本在线视频一区 | 日韩精品网站 | 99热久久最新地址获6取 | 中国精品自拍 | 国产亚洲精品欧美一区 | 最新中文字幕在线资源 | 国产一级淫片视频免费看 | 老司机免费福利视频 | 黄污网 | 一区二区三区在线观看视频 | 国产美女亚洲精品久久久综合91 | 老司机精品视频午夜免费视频 | 亚洲欧美日韩国产精品一区 | 一级毛片不卡片免费观看 | 欧美性猛交xxxx免费看久久久 | 日本大片a| 美女网站免费看 | 国产jizzjizz免费看麻豆 | 亚洲爱爱图 | 天天狠狠弄夜夜狠狠躁·太爽了 | 亚洲欧美视频一区二区 | 2020久久精品亚洲热综合 | 精品一区二区三区亚洲 | 国产女人18毛片水 | 性欧美精品videofree高清hd | 成人毛片18女人毛片 | 俺也来俺也去俺也射 | 亚洲精品一区二区三区网址 | 亚洲丶国产丶欧美一区二区三区 | 成人影院一区二区三区 | 国产日韩精品欧美一区 |