Android开发实战--高级篇总结

1、使用HttpURLConnection Response Cache缓存

在Android 4.0里面为HttpURLConnection添加了一个响应缓存(response cache ),你可以通过反射机制使用HTTP response caching ,当然前提是你的设备支持android4.0,请看下面的例子:

private void enableHttpResponseCache() {
  try {
    long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
    File httpCacheDir = new File(getCacheDir(), "http");
    Class.forName("android.net.http.HttpResponseCache")
         .getMethod("install", File.class, long.class)
         .invoke(null, httpCacheDir, httpCacheSize);
  } catch (Exception httpResponseCacheNotAvailable) {
    Log.d(TAG, "HTTP response cache is unavailable.");
  }
}

上面的示例代码将在android4.0+的设备上打开响应缓存,同时不影响较早的版本(这段代码对android4.0以前的版本没有影响)。

当缓存开启,所有缓存的HTTP请求都可以直接从本地存储中响应,而无需打开一个网络连接。在下载的时候,Conditionally cached responses 会从服务器端验证其是否有效,从而减少带宽消耗。

Uncached responses会在下次请求的时候存储在响应缓存中(the response cache )从而变为Conditionally cached responses 。

2、切换状态变化接收器以提高效率

可以使用 PackageManager 切换清单中定义的任意组件的启用状态(包括您要启用或停用的任意广播接收器),具体如以下片段所示:

ComponentName receiver = new ComponentName(context, myReceiver.class);
 
PackageManager pm = context.getPackageManager();
 
pm.setComponentEnabledSetting(receiver,
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP)

在使用此技巧时,如果您确定连接已断开,就可以停用除连接变化接收器外的所有接收器。相反,成功连接后,您就可以停止侦听连接变化,同时只需在执行更新和重新安排重复更新提醒前查看是否在线即可。
您可以使用同样的方法来延迟需要较高带宽的下载任务。只有在连接 Wi-Fi 后,您才能直接启用用于侦听连接变化和启动下载任务的广播接收器。

3、监控电池电量和充电状态

想要在一个Activity中监听电池电量或者充电状态的变化,可以使用Intent Filter注册一个Receiver来实现,该Intent Filter通过Battery Manager来监听Intent.ACTION_BATTERY_CHANGED广播。

包含有当前电池电量信息和充电状态的Broadcast Intent是一个sticky Intent,因此不需要实现一个Broadcast Receiver就可以在任何时间获取到当前的电池状态

由于这是个持续 intent,因此您无需通过将传入 null 的 registerReceiver 作为接收器直接调用(如下一代码段所示)来注册 BroadcastReceiver,系统会返回当前电池状态 intent。

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

        // 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;

注意,不能在manifest文件的Receiver中注册电量变化的动作;然而,可以使用下面的动作字符串监控和电源的连接情况以及低电量情况,每个字符串以android.intent.action作为前缀:

ACTION_BATTERY_LOW

ACTION_BATTERY_OKAY

ACTION_POWER_CONNECTED

ACTION_POWER_DISCONNECTED

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值