1、避免频繁网络请求
有效管理Service 后台服务就相当于一个持续运行的Acitivity,
如果开发的程序后台都会一个service不停的去服务器上更新数据,在不更新数据的时候就让它sleep,这种方式是非常耗电的,
解决:
通常情况下,可以使用AlarmManager来定时启动服务。
实验:30分钟执行一次:
AlarmManager alarmManager =
(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;
//管理器的执行(30分钟执行一次服务的更新)
am.setRepeating(AlarmManager.RTC,firstWake, interval, pendingIntent);
2、数据压缩
在进行大数据量下载时,尽量使用GZIP方式下载,可以减少网络流量
实现的代码:
//网络数据下载:请求的url
HttpGet request =
new HttpGet (“http://example.com/gzipcontent“);
//接受请求下载
HttpResponse resp =
new DefaultHttpClient().execute(request);
HttpEntity entity = response.getEntity();
InputStream compressed = entity.getContent();
InputStream rawData = new GZIPInputStream(compressed);
**3、使用线程池**
下载图片等耗时任务放置在普通线程池,避免耗时任务阻塞线程池后,导致所有异步任务都必须等待。
**4、选择合适的数据格式传输形式**
(1)JSON和Protobuf效率明显比XML好很多
(2)移动设备,最好能使用JSON之类的轻量级数据格式为佳
(3)使用SAX等边读取边解析的方式来解析数据
**5、数据库**
(1) 相对于封装过的ContentProvider而言,使用原始SQL语句执行效率高,比如使用方法rawQuery、execSQL的执行效率比较高。
(2)一次修改多个数据时,使用SQLite的事务方式批量处理
(3)批量插入多行数据使用InsertHelper或者bulkInsert方法
(4)能用文件操作的,尽量采用文件操作,文件操作的速度比数据库的操作要快10倍左右
6、性能测试:
(1)逻辑算法的效率执行,我们使用Android上最普遍的,计算执行时间来查看:
long start = System.currentTimeMillis();
// 你想要测试的方法
long duration = System.currentTimeMillis() - start;
“`
(2)可以在DDMS中查看下Logcat的VM释放内存情况,大概模拟下那些地方可以缓存数据或改进算法的
(3)利用traceview和monkey等工具测试应用。
(7)利用layoutopt和ninepatch等工具优化视图。