Android性能优化典例(二)
1、使用 Maven 依赖方案代替使用导入jar包方案
如果项目中需要用到第三方jar包,常用的做法是去网上下载后然后放入libs文件夹,再添加到项目依赖,不过,在Android Studio已经不推荐使用这套做法了,因为如果jar有更新,那么每次都要去下载最新版本然后删除历史依赖再添加新版本的依赖,这样做很繁琐,而在Android Studio中,这个问题使用Maven已经很好的解决了,因为AS中默认的是jcenter中央库,而jcenter默认会同步Maven中央库,所以我们可以使用Gradle来添加依赖来代替之前的做法,例如:
dependencies {
compile 'com.android.support:appcompat-v7:22.+'
compile 'com.squareup.okhttp:okhttp:2.0.+'
compile 'com.android.support:recyclerview-v7:22.+'
compile 'com.android.support:cardview-v7:22.2.+'
}
我们这样使用,就指定了一个版本范围,当构建项目时候会自动从Maven库中获取指定范围的最新版本的jar包资源
2、避免深层次的布局结构(最多不要超过5层)
复杂的结构可以考虑用相对布局
3、将相同控件的相同属性抽取出来为一个style
例如:
假如有若干个Button,而Button的样式都是统一的,这时候我们可以将Button的字体大小、颜色、背景色、字体类型等抽取出来放在一个style中,供多个Button复用,如:
<style name="MyButton" parent="Base.Widget.AppCompat.Button">
<item name="android:textSize">16sp</item>
<item name="android:textColor">#ffffff</item>
<item name="android:background">#202020</item>
<item name="android:typeface">sans</item>
</style>
layout布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<Button
style="@style/MyButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Space
android:layout_width="match_parent"
android:layout_height="10dp" />
<Button
style="@style/MyButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/action_settings" />
<Space
android:layout_width="match_parent"
android:layout_height="10dp" />
<Button
style="@style/MyButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />
</LinearLayout>
效果:
可以看到这三个Button的样式都一样,复用了相同的style
4、慎用AsyncTask,使用网络请求框架(Volley、OkHttp)代替
关于AsyncTask在异步网络请求方面用的非常多,因为它使用起来比较轻量,但是关于AsyncTask也存在内存泄漏和结果丢失等问题,下面一起来看看:
1、内存泄漏
如果在Activity中使用AsyncTask以匿名内部类的方式请求网络,由于AsyncTask的生命周期可以比Activity的长(因为请求网络数据是比较耗时的),AsyncTask内部类持有Activity的引用的话,如果还在请求网络时就关闭了Activity,那么将导致Activity对象将无法回收,进而产生内存泄漏
2、结果丢失
假如Activity的launchMode是默认或者是标准的,那么当AsyncTask在请求网络数据时把屏幕旋转了,那么将会重新创建一个新的Activity,又因为还在运行的AsyncTask持有之前Activity的引用,那么将导致onPostExecute()方法不起任何作用,请求获得的数据不能加载到新的Activity上,而且也将导致内存泄漏
3、串行和并行多版本不一致
AsyncTask在1.6之前为串行,在1.6-2.3为并行,在3.0之后又改为串行,在3.0之后虽然可以通过代码来改变默认的串行为并行,但是又是一个繁琐的操作
Android性能优化典例(二)的更多相关文章
- Android性能优化典例(一)
在Android开发过程中,很多时候往往因为代码的不规范.api使用不恰当.控件的使用场景考虑不全面和用户不恰当的操作等都能引发一系列性能问题的,下面就是我目前整理的一些Android开发过程中需要注 ...
- Android性能优化典范(二)
Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的 ...
- Android性能优化第(二)篇---Memory Monitor检测内存泄露
上篇说了一些性能优化的理论部分,主要是回顾一下,有了理论,小平同志又讲了,实践是检验真理的唯一标准,对于内存泄露的问题,现在通过Android Studio自带工具Memory Monitor 检测出 ...
- Android性能优化问题总结
性能优化这块,分为UI性能优化.内存优化.数据库优化.网络优化.耗电优化等等.可以从1.如何发现问题,2.怎么解决问题,3.解决效果对比,这几个方面去描述.举个简单例子——UI优化,可以从 UI出现什 ...
- Android 性能优化探究
使用ViewStub动态载入布局.避免一些不常常的视图长期握住引用: ViewStub的一些特点: 1. ViewStub仅仅能Inflate一次,之后ViewStub对象被置空:某个被ViewStu ...
- Android 性能优化的方面方面都在这儿
又到周六了,鸿洋的不定期的周六放送又来了~~这次来谈谈性能优化吧.大家在工作中或多或少都会拿自家的应用和竞品app做比对,不可避免的需要做一些app性能优化的活.很多时候可能是策略上的调整,不过还是有 ...
- Android性能优化的方方面面
通常项目比较大的APP都面临着如下性能问题,APP启动慢.界面跳转慢.事件相应慢.滑动和动画卡顿.展现内容慢等,有的公司处理的很好,有的还有很大的优化空间,对于性能优化,怎么去做,我总结了一下性能优化 ...
- Android性能优化典范---转
Android性能优化典范 原文链接: http://hukai.me/android-performance-patterns/ JAN 17TH, 2015 | COMMENTS 2015新年伊 ...
- 老李分享:Android性能优化之内存泄漏1
老李分享:Android性能优化之内存泄漏 前言 对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我 ...
随机推荐
- Linux 高性能服务器编程——高级I/O函数
重定向dup和dup2函数 #include <unistd.h> int dup(int file_descriptor); int dup2(int file_descriptor_o ...
- linux简单命常用令
Linux常用命令总结 切换:cd tmp cd/tmp/yun cd 切换到host目录 cd .. 显示:ll Top显示系统情况 Netstat显示网络情况 Ifconfig显示网络配置 Mor ...
- 关于LT分发系统的设计构想
git地址 https://github.com/cxyxd/LtDistribution 背景 对tomcat做集群,在多机多tomcat的情况下,如果要更新代码,只能手动的将代码复制,粘贴,然后下 ...
- GDB调试工具入门
从windows转到linux下已经有一段时间了,每次刷算法题碰到问题需要调试的时候,就分分钟想关机,切换到windows上调试.于是,花了一点时间来搜索一下linux下常见的调试工具,这不搜不知道, ...
- leetcode 3 Longest Substring Without Repeating Characters最长无重复子串
Given a string, find the length of the longest substring without repeating characters. For example, ...
- JS和Jquery操作label标签
获取label值: label标签在JS和Jquery中使用不能像其他标签一样用value获取它的值: 代码如下: var label=document.getElementById("s ...
- 3、Android构建仪表测试
不同于运行于JVM的本地单元测试,仪表测试运行于你的物理设备或虚拟机中.当你需要访问设备的信息(比如Context)或者使用真正的Android framework组件时(比如SharePrefere ...
- dbms_lob使用之-基础
在Oracle中,存储在LOB中数据称为LOB的值,如使用Select 对某一LOB字段进行选择,则返回的不是LOB的值,而是该LOB字段的定位器(可以理解为指向LOB值的指针).如执行如下 ...
- Sublime Text 3 使用MarkDown编写带预览的文本
看到别人使用一个叫Markdown的标记语言来完成编码,心里就有点小激动,毕竟简短的几个符号,就可以写出如此精美的界面,实在是让人感到心旷神怡啊.于是我就在网上搜索了一些相关项的设置,于是便有了下面的 ...
- 03 RadioButton 单选按钮
>概念:从多个互斥选项中选择一个 如果是选项全部展开 RadioButton 不是展开的Spinner(下拉列表) >属性: android:checked="tr ...