閱讀169 返回首頁    go 京東網上商城


android優化之省電

Android程序中耗電最多的地方在以下幾個方麵 :

1、 大數據量的傳輸。
2、 不停的在網絡間切換。
3、 解析大量的文本數據。

那麼我們怎麼樣來改善一下我們的程序呢?
1、 在需要網絡連接的程序中,首先檢查網絡連接是否正常,如果沒有網絡連接,那麼就不需要執行相應的程序。
檢查網絡連接的方法如下:


[*]ConnectivityManager mConnectivity;
[*]TelephonyManager mTelephony;
[*]……
[*]// 檢查網絡連接,如果無網絡可用,就不需要進行連網操作等
[*]NetworkInfo info = mConnectivity.getActiveNetworkInfo();
[*]if (info == null ||
[*]        !mConnectivity.getBackgroundDataSetting()) {
[*]        return false;
[*]}
[*]//判斷網絡連接類型,隻有在3G或wifi裏進行一些數據更新。
[*]int netType = info.getType();
[*]int netSubtype = info.getSubtype();
[*]if (netType == ConnectivityManager.TYPE_WIFI) {
[*]    return info.isConnected();
[*]} else if (netType == ConnectivityManager.TYPE_MOBILE
[*]        && netSubtype == TelephonyManager.NETWORK_TYPE_UMTS
[*]        && !mTelephony.isNetworkRoaming()) {
[*]    return info.isConnected();
[*]} else {
[*]    return false;
[*]}
[*]

很多人開發的程序後台都會一個service不停的去服務器上更新數據,在不更新數據的時候就讓它sleep,這種方式是非常耗電的,通常情況下,我們可以使用AlarmManager來定時啟動服務。如下所示,第30分鍾執行一次。


AlarmManager am = (AlarmManager) [*]
        context.getSystemService(Context.ALARM_SERVICE);
[*]
Intent intent = new Intent(context, MyService.class);
[*]
PendingIntent pendingIntent =
[*]
        PendingIntent.getService(context, 0, intent, 0);
[*]
long interval = DateUtils.MINUTE_IN_MILLIS * 30;
[*]
long firstWake = System.currentTimeMillis() + interval;
[*]
am.setRepeating(AlarmManager.RTC,firstWake, interval, pendingIntent);
[*]
最後一招,在運行你的程序前先檢查電量,電量太低,那麼就提示用戶充電之類的,使用方法:


[*]public void onCreate() {
[*]    // Register for sticky broadcast and send default
[*]    registerReceiver(mReceiver, mFilter);
[*]    mHandler.sendEmptyMessageDelayed(MSG_BATT, 1000);
[*]}
[*]IntentFilter mFilter =
[*]        new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
[*]BroadcastReceiver mReceiver = new BroadcastReceiver() {
[*]    public void onReceive(Context context, Intent intent) {
[*]        // Found sticky broadcast, so trigger update
[*]        unregisterReceiver(mReceiver);
[*]        mHandler.removeMessages(MSG_BATT);
[*]        mHandler.obtainMessage(MSG_BATT, intent).sendToTarget();
[*]    }
[*]};

xin.wu發表於 2012-2-21 12:50:14

我確實發現Android比較費電。有時間連一天都用不了。感謝樓主的分享

xuemei發表於 2012-2-21 12:58:31

哇塞,很酷。搞一個放在手機裏,試一試:D

火星人發表於 2012-2-21 13:18:19

嗚嗚,我手機是塞班的係統,樓主有沒有塞班省電的好方法啊?

hong.li發表於 2012-2-21 13:18:57

太好了,我正為此發愁呢。樓主的帖子發得真及時。謝謝!

yinhangdy發表於 2012-2-21 17:37:41

如果有節省流量的就更好了

helloBYJ發表於 2012-2-22 14:22:15

本帖最後由 helloBYJ 於 2012-2-22 14:22 編輯

節省流量的方法是斷開網絡,不上網;P

hey123發表於 2012-2-24 09:40:26

android手機省電技巧,該技巧通過本人實際測試,效果很不錯,貼出來和大家一塊分享。:)
1:將手機的屏幕亮度調到最低限度。
2:將震動關閉,將來電模式設置為鈴聲。
3:平時不上網、不使用藍牙、不使用wifi時將這些功能都關閉,如果這些功能打開的話,它們會不停的搜索周圍的信號。還有將wifi中自動搜索周邊的wifi網絡也給關閉掉。
4:晚上睡覺時,可以講當前手機狀態模式,調成飛行模式或者關機。
5:最好能將自己的android手機的root權限給打開,將內置的一些不用的軟件給卸掉,因為它們會一直在後台跑著自己的服務,這樣也會很費電。
6:在平時自己使用某款軟件時,如果用完了,最好是能把它們給關閉退出來,不然這些軟件會一直在你手機的後台運行。
7:出差的途中為了讓手機更省電,可以將手機設成離線模式,這樣它就不會在換區域時不停的搜索信號。
8:平時再打電話時,最好在一個地方待會把話說完,如果不停的走動,手機的也會不停的搜索周圍的基站,並且還會增加信號忽強,忽弱時無線電波對你大腦的輻射。
9:需要大家注意的是:最好不要在公交、汽車,特別是地鐵上上網、打電話,這樣都會很耗電的。現在大部分地鐵站下邊都有網絡信號,可以通話畢竟信號還是不好。特別是上網時那耗電就特別快。
10:android手機的屏幕大,平時的服務多,都是多進程的服務。所以最好還是建議大家平時準備2塊電池,或者買一個便攜式mini電源,以防在沒電時可以及時的充電。

最後更新:2017-04-03 20:19:20

  上一篇:go Visual Studio調試裏麵的F10和F11有什麼區別
  下一篇:go Sql Server在建好的表中,新增一列