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();

[*]    }

[*]};

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

网络嗅探器

网络嗅探器:把网卡设置成混杂模式,并可实现对网络上传输的数据包的捕获与分析。 原理:   通常的套接字程序只能响应与自己MAC地址相匹配的 或者是 广播形式发出...

44910
来自专栏刘望舒

Android6.0到9.0的适配爬坑总结

  大家还记得Android 6.0权限适配的泪水吗?而现在谷歌已经出了Android P的稳定版,而且谷歌粑粑,为了大家能给辛苦熬夜加班,特地的和个大市场合作...

4173
来自专栏向治洪

android PakageManagerService启动流程分析

PakageManagerService的启动流程图 ? 1.PakageManagerService概述 PakageManagerService是andro...

50810
来自专栏CDN及云技术分享

Openssl状态机的实现

Openssl是通过“握手“建立加密信道,在该信道双方的身份都是合法的,并且传输数据都是密文传输。Openssl握手通过客户端和服务端互相交换信息计算出secr...

4023
来自专栏程序员互动联盟

【开发指南】如何为nexus 5编译固件

nexus 5是谷歌的亲儿子,而android的源码是开源的,那如果我有一个nexus 5手机,为何不自己为nexus 5编译软件呢? 开搞,本文假定已经有an...

41312
来自专栏马洪彪

Java转换Word文件到PDF文件

使用Docx4j将Word文件转换为PDF文件: public static void convertDocxToPDF(String docxFilePath...

3335
来自专栏jianhuicode

如何编写基于Android的AccessibilityService的自动打卡

第一节 缘由与准备  最近有时间空闲,闲来无事,想到使用钉钉打卡有时会迟到,所以周末的时候去看了相关网上资料,做了个demo。 材料:定时器,Accessibi...

2.7K8
来自专栏雨尘分享

TCP 看我就够了

3535
来自专栏Android源码框架分析

十分钟了解Android触摸事件原理(InputManagerService)

从手指接触屏幕到MotionEvent被传送到Activity或者View,中间究竟经历了什么?Android中触摸事件到底是怎么来的呢?源头是哪呢?本文就直观...

4044
来自专栏俗人笔记

PHP中检测IP是否是内网IP的三个方法

2833

扫码关注云+社区

领取腾讯云代金券