在之前我们讲了很多能够优化 Android 开发项目质量的方案,这些方案更多的是从一些比较专精的方向切入的,阐述的是一些比较重要且独立的优化方案。

本文我们将总结一下在日常开发过程中我们能够使用的一些优化项目的技巧和方案。

一、RecycleView 优化

RecycleView在开发时可以考虑以下优化的方案:

1. 数据处理和视图加载分离

a. 数据的处理逻辑尽可能放在异步处理,onBindViewHolder方法只做数据填充视图的操作。

b. 对ItemView设置监听器,不要对每一个Item都调用addxxListener,可以考虑公用一个xxListener,根据ID的不同来操作,优化了对象的频繁创建带来的资源消耗。

2. 数据加载优化

a. 分页拉去远端数据,并对拉去下来的数据进行缓存,尽可能提升二次加载速度。

b. 对于新增的或者删除数据通过 DiffUtil 进行局部数据的刷新,尽量不进行全局数据刷新。

c. 对于使用库版本在25.1.0及以上的时候使用Prefetch功能。

补充:

a. DiffUtil 推荐博客和项目地址:https://github.com/mcxtzhang/SupportDemos【Android】RecyclerView的好伴侣:详解DiffUtil

b. Prefetch 推荐博客地址:RecyclerView Prefetch功能探究

3.布局优化

a. 减少布局层级,简化ItemView。

b. 如果Item高度是固定的话,可以使用RecycleView.setHasFixedSize(true)来避免requestLayout浪费资源。

c. 如果多个RecycleView的Adapter是一样的,比如嵌套的RecycleView中存在一样的Adapter,可以通过设置RecycleView.setRecycleViewPool(pool),来共用一个RecycleViewPool。

二、WebView 优化

1. WebView 加载优化

a. 可以将一些资源文件放在assest目录,然后重写WebViewClient的shouldInterreptRequest方法,进行访问地址拦截,当url地址命中本地配置的url时,使用本地资源替代,否则就使用网络上的资源。

b. WebView 初始化慢,可以在适当的时机初始化好一个WebView待用,如果时机合适也可以在初始化好之后请求数据。

2. WebView 内存泄漏优化

a. 建议直接在代码中创建WebView,即使用new WebView(),并传入Application Context 代替在 XML 里面声明防止 Activity 引用被滥用,能解决90%以上的WebView内存泄漏。使用示例如下:

webview = new WebView(getContext().getApplication());
container.addView(webview);

b. 及时销毁WebView。 示例代码如下:

if(webview != null) {
webview.setWebViewClient(null);
webview.setWebChromeClient(null);
webview.loadDataWithBaseURL(null, "”, "text/html", "utf-8", null);
((ViewGroup) webview.getParent()).removeView(webview);
webview.destroy();
webview = null;
}

三、Apk 包体积优化

1. 资源优化

a. 使用 Lint 工具扫描工程资源,手动移除无用资源。

b. 在Gradle参数中配置 shrinkResource=true。

c. 优先考虑使用Shape代码、.9图、svg矢量图、VectorDrawable 类来替换传统的图片。

2. 代码优化

a. 启用混淆以移除无用代码。

b. 检查代码逻辑,提高复用率。

3. so库优化

可以考虑只提供主流架构的支持,比如arm,对于mips和x86架构可以考虑不提供支持

android {
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a"
}
}
}

Android 项目优化(六):项目开发时优化技巧总结的更多相关文章

  1. IT第八天 - 类的应用、debug、项目开发模式优化

    IT第八天 上午 类的应用 1.对象在实例化时是非常耗费系统资源的,因此要尽量减少new字段的使用 2.类的初始值是null,在使用未实例化的类时,很容易导致报错:NullExceptionPoint ...

  2. Web项目开发性能优化解决方案

    web开发性能优化---安全篇 1.ip验证 2.操作日志.安全日志.登录日志 3.SQL注入校验 4.权限管理 5.验证规范(前端.后端.数据库约束) 2014-10-29 08:04   2773 ...

  3. (转) Android开发性能优化简介

    作者:贺小令 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序.以上理由,足以 ...

  4. [素材资源] Android开发性能优化简介(非常不错的)

    转自(http://www.starming.com/index.php?action=plugin&v=wave&tpl=union&ac=viewgrouppost& ...

  5. 转——Android应用开发性能优化完全分析

    [工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...

  6. Android 应用开发性能优化完全分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  7. 【转】Android应用开发性能优化完全分析

    http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...

  8. Android应用开发性能优化完全分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  9. Android开发性能优化总结(一)

    安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户. 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流. ...

随机推荐

  1. String字符串为什么不可变的深入理解

    String是被final修饰的,是不可变对象,那么这句什么意思呢.在学习scala时候var,val时候,就想到这个问题,所以记录下 看案例: package com.cxy; import sun ...

  2. JVM(2)--深入理解java对象创建始终

    java对象探秘 java是一门面向对象的语言,我们无时无刻不在创建对象和使用对象,那么java虚拟机是如何创建对象的?又是如何访问对象的?java对象中究竟存储了什么运行时所必需的数据?在学习了ja ...

  3. PHP安装扩展补充说明

    上一篇文章中用到了,php的sodium扩展,那么如何安装PHP扩展呢?基于我之前踩过的一些坑,大致整理了几种安装php扩展的方法.已安装sodium为例 1.先做点准备工作,安装sodium依赖 r ...

  4. CCNA 之 综合实验

    CCNA 综合实验 需要:根据下列图中的网路拓扑,搭建环境; PC1属于VLAN10:PC2属于VLAN20:网关均在OR_C2811: VLAN10.20对应的网段分别为192.168.10.0.2 ...

  5. 【洛谷】P2256

    (^_^) 题目: 题目 思路: 这是一道并查集水题,适合初学者做!!! 若不会并查集的点我,那是dalao的博客! 本题难点:名字是字符串,要字符串处理 给每个名字一个编号,如\(1,2,3,4,5 ...

  6. Spring Cloud第二篇 | 使用并认识Eureka注册中心

    ​ 本文是Spring Cloud专栏的第二篇文章,了解前一篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 ​​ 一.Sprin ...

  7. php踩过的那些坑(5)浮点数计算

    一.前方有坑 php在使用加减乘除等运算符计算浮点数的时候,经常会出现意想不到的结果,特别是关于财务数据方面的计算,给不少工程师惹了很多的麻烦.比如今天工作终于到的一个案例: $a = 2586; $ ...

  8. KETTLE实现复杂的流程

    KETTLE是一款将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的非常好用的一款ETL工具.学会它,对于跨数据库的表处理或者定时生成文本,excel等常 ...

  9. redis数据类型--set

    set是String的一个无序集合,最大存储量2^32-1(大概40多亿) 1.操作命令:(xxx可以是任意字符串) sadd xxx a b c d e (添加一个或多个) smembers xxx ...

  10. 严格次短路的求法-spfa

    #include<iostream> #include<cstdio> #include<algorithm> #include<queue> #inc ...