Android应用程序优化都有哪些需要注意的?

1. 代码优化的关键有一下几点:
  • 少用浮点运算、文件、pipe、数据库访问
  • 用高效的方式:StringBuffer代替大量临时String,SoundPool代替多个MediaPlayer,texture代替canvas, Log.d() 代替System.out.print(),避免invalidate()
  • 重视onMeasure/onLayout/onDraw/onTouchEvent/getView等函数的效率
2. 游戏开发需要注意一下几点:
  • 少用new()/enum/Iterator/HashMap/Arrays.sort()/Class.getXXX()…
  • 多用private、final、局部变量,
  • 2D善用draw_texture、3D善用VBO顶点缓冲
  • 触屏事件时,暂停接受运动感应事件
  • 用NDK实现关键代码
3. 不要求速度时,可用WebView和网页实现界面
4. 编译时执行代码优化

Android开发过程中如何进行算法与界面的优化?

1. 调整程序的进程结构
  • 减少进程数量(善用ViewStub、ViewSwitch等)
  • 减少进程周期循环次数,及时让进程休眠
  • 不编写长寿代码,只在需要时运行,服务应快速完成并立即结束
2. 调整算法,取消不必要的环节,减少对CPU和内存的需求
  • 减少函数调用次数
  • 适当使用JNI
3. 精心设计界面
  • 避免复杂布局。控制嵌套和View数量,善用Merge、inflate()、RelativeLayout等
  • 去除不必要的背景、动画
  • 执行长时间、耗电的任务之前检查电量、提示用户 
Activity结束后进程仍然存在,开发者不需要编写结束进程的代码,系统自动判断何时该终止。

当然也可以主动结束本Activity:

正常方式(进程未必会结束)
finish();

传统方式(真正结束进程):
System.exit(0);

自杀方式(真正结束进程):
android.os.Process.killProcess(
    android.os.Process.myPid());
 
 
 
 
 
 
 
 
 
 
 

Adapter的作用是界面与数据之间的桥梁,通过设置适配器至ListView控件后(如调用ListView的 setAdapter(ListAdapter adapter) ),列表的每一项会显示至页面中。其实,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View,如:

@Overridepublic View getView(int position, View convertView, ViewGroup parent) {return super.getView(position, convertView, parent);}



我们看一看下面的这段代码:

public View getView(int position, View convertView, ViewGroup parent) {View newView = mInflater.inflate(R.layout.list_item, null);((TextView) newView .findViewById(R.id.text)).setText(DATA[position]);((ImageView) newView .findViewById(R.id.icon)).setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);return newView ;}



上面的代码块中,我通过LayoutInflater.inflate(,)将Layout文件–layout.list_item转换为View.
(注:Layout也是View的子类,但在android中如果想将xml中的Layout转换为View放入.java代码中操作,只能通过Inflater,而不能通过findViewById())
这时,如果我的ITEM项有数以千条这样多或更多呢,再以上面代码块的写法,后果自己想想吧。

于是,改用其它一种写法:

public View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = mInflater.inflate(R.layout.list_item, null);}((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]);((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);return convertView;}



这时,上面的代码是不是好了很多?系统将会减少创建很多View。性能得到了很大的提升。
到这里,问一下,还有没有优化的方法呢,是有的,请看————》》:

public View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = mInflater.inflate(R.layout.list_item_icon_text, null);holder = new ViewHolder();holder.text = (TextView) convertView.findViewById(R.id.text);holder.icon = (ImageView) convertView.findViewById(R.id.icon);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.text.setText(DATA[position]);holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);return convertView;}static class ViewHolder {TextView text;ImageView icon;}



 


这样系统性能会得到更大的提升。
希望可能帮助到大家。这也是平时面试当中面试官经常会问到的”ListView的优化”的问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值