23、性能优化与测试

 UI性能优化

1. 由于View会不断刷新、变化,所以应尽量减少不必要的onMeasure、 onDraw调用。

2. 对于ListView、GridView等需要Adapter加载数据的控件,在 getView方法中应尽量减少访问耗资源的资源,例如,大量的写入文 件操作,访问网络等。否则这些控件会出现不时的停顿现象。如果非 要访问这些资源,应将这些操作放到线程中。

3. 在getView方法中应convertView参数,而不要一味地创建新的视图 对象,并且可以使用convertView.setTag和convertView.getTag保 存和获取视图对象。 

public View getView(int position, View convertView, ViewGroup parent) {

      ViewHolder holder;
      if (convertView == null) {

          final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

          convertView = inflater.inflate(R.layout.list_item_icon_text, null);

          holder = new ViewHolder();
          holder.icon = (ImageView) convertView.findViewById(R.id.icon);

           holder.text = (TextView) convertView.findViewById(R.id.text);

          convertView.setTag(holder);

       } else {

           holder = (ViewHolder) convertView.getTag();

       }

       holder.icon.setImageResource(R.drawable.icon);

       holder.text.setText(mData[position]);
       return convertView;

 避免ANR

ANR(Application Not Responding)

有时程序会出现ANR现象,解决方法是将耗资源的 操作(如下载文件、复杂算法等)放到其他线程中。 

 执行时间测试

long start = System.currentTimeMillis(); ... ...
long end = System.currentTimeMillis();

long time = end – start; 

 内存消耗测试

// 获取系统内存总数
long total = Runtime.getRuntime().totalMemory();

// 获取剩余内存
long free = Runtime.getRuntime().freeMemory();

// 返回已使用的内容 long used = total - free; 

 性能分析工具:traceview

// 开始监视方法 Debug.startMethodTracing("activity_trace"); 

test1();   // 执行test1方法
test2();   // 执行test2方法
Debug.stopMethodTracing();   // 停止监视方法 

会在SD卡的根目录生成一个activity_trace.trace文件。 

 自动化测试工具:Monkey 

monkey -p com.android.calculator2 -v 5000

其中-p表示对象包 –v 表示事件数量 

原文地址:https://www.cnblogs.com/androidsj/p/3930030.html