该软件是商家定制的客户端,商家在后台管理系统上传商品、礼品、优惠活动等信息,然后在客户端上面可以查看、提交订单、兑换礼品等。现在到测试阶段了,发现程序的耗电量非常大,发热非常严重,应该是程序性能的问题。经过简单对比,耗电量约为 大众点评 的2倍。
程序的主要逻辑如下:
1.有一个后台常驻的服务,通过该服务访问网络,然后通过回调将数据返回到Activity中。服务中的线程每500ms循环一下(Thread.sleep(500)),如果当前有任务则访问网络获取数据,否则将什么也不做,继续循环。
2.使用HttpClient请求数据,服务器返回JSON数据,解析,显示。
3.部分页面的内容存入本地数据库,同时将图片存入SD卡中。当再次进入该页面时,如果没有网络则直接读取本地数据,如果网络正常则请求网络,然后更新本地数据,然后再读取本地数据显示出来。
4.主界面使用TabHost加Fragment实现。请大神帮忙分析一下,那些地方可能对程序性能造成了较大影响?或者推荐一下,有哪些工具可以用来检测一下程序的性能。性能网络数据库

解决方案 »

  1.   

    一般耗电大 个人认为是以下原因
    1. 很多数据逻辑可以在服务端处理后在传给客户端,客户端处理逻辑会耗电。
    2. 客户端启动了很多线程,线程不仅占用内存,而且需要CPU的调度。
    3. 客户端中实例了大量的对象没有释放。
    4. 客户端用了一些复杂的逻辑计算,不适合JAVA处理,应该放在JNI C代码中处理。如果后台服务特别复杂,那就开启一个独立进程处理,用Binder传输数据。减轻客户端进程的负担。
      

  2.   

    http://mobile.51cto.com/android-229128.htm
      

  3.   


    可能是我没说清楚吧,那个Thread.sleep(500)的线程一直在运行,但并不是一直都在请求数据。如果当前没有请求数据的任务,那么就相当于是一个空循环,每秒2次。这个会在多大程度的费电呢? 还有,我后来把这个线程改成了没有任务的时候就wait的方式,有任务的时候notify,好像没啥效果。