专业的编程技术博客社区

网站首页 > 博客文章 正文

Android面试题-与性能优化相关面试题三

baijin 2024-08-19 11:15:48 博客文章 11 ℃ 0 评论

String字符串优化

最常见的例子就是当你要频繁操作一个字符串时,使用StringBuffer代替String。

还比如:使用int数组而不是Integer数组。

避免创建短命的临时对象,减少对象的创建就能减少垃圾收集,进而减少对用户体验的影响。

ListView优化

Item布局,层级越少越好,使用hierarchyview工具查看优化。

复用convertView

使用ViewHolder

item中有图片时,异步加载

快速滑动时,不加载图片

item中有图片时,应对图片进行适当压缩

实现数据的分页加载

减少不必要的全局变量

尽量避免static成员变量引用资源耗费过多的实例,比如Context。

因为Context的引用超过它本身的生命周期,会导致Context泄漏。所以尽量使用Application这种Context类型。

你可以通过调用Context.getApplicationContext()或 Activity.getApplication()轻松得到Application对象。

Cursor(游标)回收

Cursor是Android查询数据后得到的一个管理数据集合的类,在使用结束以后。应该保证Cursor占用的内存被及时的释放掉,而不是等待GC来处理。并且Android明显是倾向于编程者手动的将Cursor close掉,因为在源代码中我们发现,如果等到垃圾回收器来回收时,会给用户以错误提示。

Receiver(接收器)回收

调用registerReceiver()后未调用unregisterReceiver().

当我们Activity中使用了registerReceiver()方法注册了BroadcastReceiver,一定要在Activity的生命周期内调用unregisterReceiver()方法取消注册

也就是说registerReceiver()和unregisterReceiver()方法一定要成对出现,通常我们可以重写Activity的onDestory()方法,在onDestory里进行unregisterReceiver操作

Stream/File(流/文件)回收

主要针对各种流,文件资源等等如:

InputStream/OutputStream,SQLiteOpenHelper,SQLiteDatabase,Cursor,文件,I/O,Bitmap图片等操作等都应该记得显示关闭。

避免内部Getters/Setters

在Android中,虚方法调用的代价比直接字段访问高昂许多。通常根据面向对象语言的实践,在公共接口中使用Getters和Setters是有道理的,但在一个字段经常被访问的类中宜采用直接访问。

for循环

访问成员变量比访问本地变量慢得多,如下面一段代码:

永远不要在for的第二个条件中调用任何方法,如下面一段代码:

对上面两个例子最好改为:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表