网站优化

20条App功用优化的主张

点击次数:    更新时间:2017/12/15 11:10:28  【打印此页】  【关闭

2017-12-08 14:35 稿源:人人都是产品司理  0条谈论  撤稿纠错

注:你的app为什么会卡?为什么占用大内存?应该怎样处理?这篇文章会给你答案。


20 条主张


1. itmap的合理运用:运用Bitmap过后,就需求及时的调用recycle()办法来开释Bitmap占用的内存空间,而不要等Android体系来进行开释。


代码示例:


// 先判别是否现已收回


if(bitmap != null && !bitmap.isRecycled()){


bitmap.recycle();


bitmap = null;


}


System.gc();


2. 对常量运用static final修饰符


static final int intVal = 42;


static final String strVal = “Hello, world!”;


将一个办法或类声明为final不会带来功用的进步,可是会协助编译器优化代码。举例说,如果编译器知道一个getter办法不会被重载,那么编译器会对其选用内联调用。


3. 静态办法替代虚拟办法


如果不需求拜访某目标的字段,将办法设置为静态,调用会加快15%到20%。这也是一种好的做法,因为你能够从办法声明中看出调用该办法不需求更新此目标的状况。


4. 削减不必要的全局变量


尽量防止static成员变量引证资源耗费过多的实例,比方Context,因为Context的引证超越它本身的生命周期,会导致Context走漏。所以尽量运用Application这种Context类型。 能够经过调用Context.getApplicationContext()或 Activity.getApplication()轻松得到Application目标。


5. 防止创立不必要的目标: 就是防止创立短命的暂时目标。削减目标的创立就能削减废物搜集,进而削减对用户体会的影响。


例如:频频操作一个字符串时,运用StringBuffer替代String。


关于一切一切根本类型的组合:int数组比Integer数组好,这也归纳了一个根本现实,两个平行的int数组比 (int,int)目标数组功用要好许多。.防止运用浮点数


一般的经历是,在Android设备中,浮点数会比整型慢两倍。


7. 运用实体类比接口好


假定你有一个HashMap目标,你能够将它声明为HashMap或许Map:


Map map1 = new HashMap();


HashMap map2 = new HashMap();


哪个更好呢?


依照传统的观念Map会更好些,因为这样你能够改动他的详细完结类,只需这个类承继自Map接口。传统的观念关于传统的程序是正确的,可是它并不合适嵌入式体系。调用一个接口的引证会比调用实体类的引证多花费一倍的时刻。如果HashMap彻底合适你的程序,那么运用Map就没有什么价值。如果有些当地你不能断定,先防止运用Map,剩下的交给IDE供给的重构功用好了。(当然公共API是一个破例:一个好的API常常会献身一些功用)


8. 拜访成员变量比拜访本地变量慢得多


for循环:不要在for的第二个条件中调用任何办法


反例:for(int i =0; i < this.getCount(); i++) {}


正例:int count = this.mCount;  int count = this.getCount();


for(int i =0; i < count; i++)  {


}


9. 资源类目标在不运用的时分,应该及时封闭它们,便利它们的缓存数据能够及时收回。


例如:Cursor、File文件等都需求在finally中封闭资源性目标,防止在反常状况下资源目标未被开释的危险


10. 注册播送接收器、注册观察者等需求在不运用的时分撤销注册。


例如:假定在Activity中,监听体系的电话效劳,能够在Activity中界说一个PhoneStateListener的目标,一起将它注册到TelephoneManager效劳中。关于Activity目标,理论上要求Activity退出后该Activity的目标就会被开释掉。可是如果在开释Activity目标时,忘掉撤销之前注册的PhoneStateListener目标,则会导致Activity无法被GC收回。如果不断的进出这个Activity,则终究会因为许多的Activity目标没有办法被收回而引起频频的GC状况,乃至导致Out Of Memory。


11. 有效的运用体系自带的资源,Android体系内置了许多的资源,比方字串、色彩界说、常用Icon图片、动画款式、及简略的布局,没有特别要求,资源能够在程序中直接引证。这样不仅削减内存的开支,还能够削减apk的巨细。


12. 视图复用,运用ViewHolder完结ConvertView复用,这根本上是一切容器控件的处理方法,如ListView、GridView等。


13. 运用最优的数据类型,比较少的目标数时,ArrayMap替换HashMap的运用,防止运用枚举,枚举变量十分便利,但不幸的是它会献身履行的速度和并大幅添加文件体积。


14. 图片内存优化


Android供给的多种位图格局中,最高的是RGB_8888,也是体系默许的位图格局,其他几种都削减位图通道,能够削减内存开支,如一些部分图片、小屏幕手机或许对图片质量要求不高的场景,均能够运用RGB_565,或许ARGB_ 4444 等图像格局。


图片缩放:inSampleSize、inScaled、inDensity和inTargetDensity

位图内存重用:inBitmap的运用,能够结合LruCache完结。

引荐开源库:picasso、Glide

15. Android 网络通信框架Volley。


16. 目标池、线程池的合理运用。


17. 运用IntentService替代Service。


IntentService优势:新开线程;次序处理Intent;履行完自动退出。


18. 尽量不要因一两个特性而运用大体积类库。


19. 目标不必时最好显式置为Null能够削减GC开支。


20. 多了解并运用类库。


一些例子


1. 当处理字串的时分,尽量运用String.indexOf(),String.lastIndexOf()等特别完结的办法。这些办法都是运用C/C++完结的,比起Java循环快 10 到 100 倍。


2. System.arraycopy办法在有JIT的Nexus One上,自行编码的循环快 9 倍。



3. android.text.format包下的Formatter类,供给了IP地址变换、文件巨细变换等办法;DateFormat类,供给了各种时刻变换,都是十分高效的办法。


4. TextUtils类,关于字符串处理Android为我们供给了一个简略有用的TextUtils类,如果处理比较简略的内容不必去思考正则表达式不妨试试这个在android.text.TextUtils的类


5. 高功用MemoryFile类,关于I/O需求频频操作的,主要是和外部存储相关的I/O操作,MemoryFile经过将 NAND或SD卡上的文件,分段映射到内存中进行修改处理,这样就用高速的RAM替代了ROM或SD卡,功用天然进步不少,关于Android手机而言一起还削减了电量耗费。该类完结的功用不是许多,直接从Object上承继,经过JNI的方法直接在C底层履行。


本文链接:http://www.yizheng.org.cn/news/news405.html
上一条:Bing与google的SEO优化规矩有什么不同?    下一条:谷歌 SEO 入门攻略 2018 年版(一):Google 抓取