《android开发艺术探索》读书笔记(十五)--Android性能优化
接上篇《android开发艺术探索》读书笔记(十四)--JNI和NDK编程
No1:
如果<include>制定了这个id属性,同时被包含的布局文件的根元素也制定了id属性,那么以<include>指定的id属性为准
No2:
绘制优化
1)onDraw中不要创建新的局部对象
2)onDraw方法中不要做耗时的任务
No3:
内存泄露优化
场景一:静态变量导致的内存泄露:
如果静态变量持有了一个Activity,会导致Activity无法及时释放。
解决办法:1使用Application的Context。 2慎用statistic关键字
场景二:单例模式导致的内存泄露:
因为单例模式的生命周期和Application保持一致,所以如果单例模式持有了一个Activtiy,会导致Activity无法及时释放
解决方法:尽量的使用Application的全局Context。
场景三:属性动画导致的内存泄露:
因为Activity的View被动画持有,而View又持有Activity,如果动画无限循环,会导致Activity无法及时释放。
解决方法:Activity的onDestory中调用animator.cancel()来停止动画
No4:
当一个进程发生ANR了以后,系统会在/data/anr目录下创建一个文件traces.txt。
No5:
性能优化的建议
1)避免创建过多的对象
2)不要过多使用枚举,枚举占用的内存空间要比整形大
3)常量请使用static final来修饰
4)使用一些Android特有的数据结构,比如SparseArray和Pair等,它们都具有更好的性能
5)适当使用软引用和弱引用
6)采用内存缓存和磁盘缓存
7)尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄露
《android开发艺术探索》读书笔记(十五)--Android性能优化的更多相关文章
- Android开发艺术探索读书笔记——01 Activity的生命周期
http://www.cnblogs.com/csonezp/p/5121142.html 新买了一本书,<Android开发艺术探索>.这本书算是一本进阶书籍,适合有一定安卓开发基础,做 ...
- Android开发艺术探索读书笔记——进程间通信
1. 多进程使用场景 1) 应用某些模块由于特殊需求须要执行在单独进程中. 如消息推送,使消息推送进程与应用进程能单独存活,消息推送进程不会由于应用程序进程crash而受影响. 2) 为加大一个应用可 ...
- [读书笔记]《Android开发艺术探索》第十五章笔记
Android性能优化 Android不可能无限制的使用内存和CPU资源,过多的使用内存会导致内存溢出,即OOM. 而过多的使用CPU资源,通常是指做大量的耗时任务,会导致手机变的卡顿甚至出现程序无法 ...
- android开发艺术探索读书笔记之-------view的事件分发机制
View的点击事件的分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生后,系统需要把这个事件传递给一个具体的View,而这个过程就是分发过程. 分发过程主要由以下 ...
- Android开发艺术探索学习笔记(十)
第十章 Android的消息机制 面试中经常会被问到的一个问题:handler是如何在子线程和主线程中进行消息的传递的,这个问题通过了解Android的消息机制可以得到一个准确的答案. Androi ...
- Android开发艺术探索学习笔记(三)
第三章 View的事件体系 3.1 View基础知识 3.1.1 什么是view View 是Android中所有控件的基类,是一种界面层的控件的一种抽象,它代表了一个控件. 3.1.2 View的 ...
- Android开发艺术探索学习笔记(十一)
第十一章 Android的线程和线程池 从用途上来说,线程分为子线程和主线程,主线程主要处理和界面相关的事情,而子线程往往用于执行耗时的操作.AsyncTask,IntentService,Hand ...
- Android开发艺术探索学习笔记(六)
第六章 Android的Drawable Drawable的优点:使用简单,比自定义view的成本要低:非图片类型的Drawable占用空间小,有利于减小APK安装包的大小. 6.1Drawable ...
- Android开发艺术探索学习笔记(四)
第四章 View的工作原理 4.1初识ViewRoot和DecorView ViewRoot是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成 ...
- Android开发艺术探索学习笔记(一)
第一章 Activity的生命周期和启动模式 1.1Activity的生命周期全面解析 1.1.1典型情况下的生命周期分析 (1)在两个Activity进行切换时,当前的Activity的onPaus ...
随机推荐
- git 文件状态与工作区域
在上一篇简单讲述了文件状态与工作区域,在这里结合相关git命令详细了解文件的状态变更. 目录 1. 介绍 2. 常用命令 3. 实际操作 1. 介绍 git的文件状态是其git核心内容,了解后对后续的 ...
- CColor类封装
CColor类封装 Color.h #pragma once #include <sstream> #include <string> using namespace std; ...
- 实现iota函数
void Reverse(char *s) { char temp; char *p = s; char *q = s; while (*p != '\0') { p ++; } q --; whil ...
- git 不成功
fatal: Interactive git shell is not enabled.hint: ~/git-shell-commands should exist and have read an ...
- 让Python支持中文注释
在第一行中加入如下行即可,表示文件的编码: #coding=utf-8 或 #coding=gbk
- 【转】linux shell 逻辑运算符、逻辑表达式
shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决很多复杂的判断. 一.逻辑运算符 逻辑卷标表示意思 1.关于档案与目录的侦测逻辑卷标! -f常用!侦测‘档案’是否存在 eg: ...
- c# 颜色RGB到HSB互相转换
/// <summary> /// 色相,饱和度,亮度转换成rgb值 /// </summary> /// <returns></returns> pu ...
- Linux下php+imagemagick支持webp格式的图片
摘要 ImageMagick是一款功能强大的图片处理工具包,很多互联网应用中都会涉及到图片处理工作,比如切割.缩放.水印.格式转换等.ImageMagick就是一个理想的工具包. 安装基础依赖 先检查 ...
- RMI基础
远程方法调用(Remote Method Invocation,RMI)从JDK1.1就已经实现,它大大增强了Java开发分布式应用的能力.可以实现通过网络完成不同JVM间的通信,不仅可以传递基本的数 ...
- React ref回调函数例子
ref属性也可以是一个回调函数而不是一个名字. 这个函数将要在组件被挂载之后立即执行. 这个参照的组件将会作为该函数的参数,这个函数可以立即使用这个组件参数,当然也可以将其保存供以后使用. 当这个 ...