《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)尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄露

原文地址:https://www.cnblogs.com/anni-qianqian/p/8350484.html

时间: 2024-10-25 14:28:54

《android开发艺术探索》读书笔记(十五)--Android性能优化的相关文章

Android开发艺术探索读书笔记——进程间通信

1. 多进程使用场景 1) 应用某些模块因为特殊需求需要运行在单独进程中.如消息推送,使消息推送进程与应用进程能单独存活,消息推送进程不会因为应用程序进程crash而受影响. 2) 为加大一个应用可使用的内存,需要多进程来获取多份内存空间. 2. 如何开启多进程 给四大组件(Activity.Service.Receiver.ContentProvider)在AndroidMainfest中指定android:process属性指定. 如果进程以":"开头的进程,代表应用的私有进程,其

[读书笔记]《Android开发艺术探索》第十五章笔记

Android性能优化 Android不可能无限制的使用内存和CPU资源,过多的使用内存会导致内存溢出,即OOM. 而过多的使用CPU资源,通常是指做大量的耗时任务,会导致手机变的卡顿甚至出现程序无法响应的情况,即ANR. 15.1.1布局优化 1.怎样进行布局优化? 首先删除布局中没用的控件和层级 其次有选择的使用性能较低的ViewGroup. 布局优化的还有一种手段是採用标签.标签.ViewStub.标签主要用于布局重用,标签一般和配合使用,它能够减少减少布局的层级,而ViewStub则提供

android开发艺术探索读书笔记之-------view的事件分发机制

View的点击事件的分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生后,系统需要把这个事件传递给一个具体的View,而这个过程就是分发过程. 分发过程主要由以下3个方法共同完成: public boolean dispatchTouchEvent(MotionEvent event) 用来进行事件的分发.如果事件能够传递给当前的View,那么此方法一定会被调用,返回结果受当前的View的onTouchEvent和下级View的dispatchTouchEv

Android开发艺术探索(研读笔记)——03-Android中的IPC机制(一)

Android开发艺术探索(研读笔记) 作者:Dimon 微博:@Dimon-喰 GitHub:@Dimon94 LOFTER:@Dimon. 03-Android中的IPC机制(一) 1.Android IPC 简介 IPC(Inter-Process-Communication):含义为进程间通信,指两个进程之间进行数据交换的过程. 什么是进程:一般指一个执行单元,在PC和移动设备上的一个程序或者一个应用. 什么是线程:线程是CPU调度的最小单元,是一种有限的系统资源. 而一个进程可以包含多

Android开发艺术探索——第七章:Android动画深入分析

Android开发艺术探索--第七章:Android动画深入分析 Android的动画可以分成三种,view动画,帧动画,还有属性动画,其实帧动画也是属于view动画的一种,,只不过他和传统的平移之类的动画不太一样的是表现形式上有点不一样,view动画是通过对场景的不断图像交换而产生的动画效果,而帧动画就是播放一大段图片,很显然,图片多了会OOM,属性动画通过动态的改变对象的属性达到动画效果,也是api11的新特性,在低版本无法使用属性动画,但是我们依旧有一些兼容库,OK,我们还是继续来看下详细

Android动画(开发艺术探索读书笔记)

Android动画可以分为3类:View动画,帧动画,属性动画 1.View动画 可以通过XML来创建,也可以通过代码来创建 1.1通过XML创建 在res/anim下创建filename.xml文件,语法如下所示 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" andro

Android开发艺术探索读书(三)-View的事件体系

移动手持客户端作为目前最受欢迎的智能设备,拥有着最为广大的体验用户群体.因此,作为软件开发商,要紧紧抓住用户的胃口,不仅要向用户提供合适的服务项目,也应该更为注重与用户的交互体验.而作为感觉型的用户,应用操作是否流畅,界面内容是不是足够精致,是判断该应用是不是一个好应用的硬性标准.那么,要如何去强化与用户的交互体验呢?这就涉及了本章所讲的内容:View的事件体系 提纲: 一.什么是View 二.View的位置参数 三.几个相关的View知识点 四.View的滑动深入 五.view的事件分发 六.

Android开发艺术探索学习笔记(十一)

第十一章  Android的线程和线程池 从用途上来说,线程分为子线程和主线程,主线程主要处理和界面相关的事情,而子线程往往用于执行耗时的操作.AsyncTask,IntentService,HandlerThread都可以扮演线程的角色. AsyncTask封装了线程池和Handler,主要是为了方便开发者在主线程中更新UI. HandlerThread是一种具有消息循环的线程,在它的内部可以使用Handler. IntentService是一个服务,系统对其进行了封装,使其可以更方便的执行后

《Android 开发艺术探索》笔记——(3)View 的事件体系

View 基础知识 View 是 Android 中所有控件的基类,ViewGroup 也继承了 View. Android 中,x 轴和 y 轴的正方向分别为右和下. 位置参数: (left , top ): View 左上角原始坐标 (right, bottom): View 右下角原始坐标 (x , y ): View 左上角最终坐标 translationX: View 左上角横向偏移量 translationY: View 左上角纵向偏移量 x = left + translation

《Android开发艺术探索》第11章 Android的线程和线程池

第11章 Android的线程和线程池 11.1 主线程和子线程 (1)在Java中默认情况下一个进程只有一个线程,也就是主线程,其他线程都是子线程,也叫工作线程.Android中的主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作.线程的创建和销毁的开销较大,所以如果一个进程要频繁地创建和销毁线程的话,都会采用线程池的方式.(2)在Android中除了Thread,还有HandlerThread.AsyncTask以及IntentService等也都扮演着线程的角色,只是它们具有不