性能优化的基本知识普及:
(Java作为Android开发基本语言,很容易想象Android和Java的性能优化原则在大多数情况下是通用的)
<1> 代码的最优化:
程序的简洁性、可读性。不同的情况下对二者的侧重点会不同。这一点可以参考算法优化原则对空间和时间的权衡。
<2> 程序的容错性:
亦称程序的健壮性,这决定了客户对产品的满意程度
<3> 程序中各个部分的执行效率:
方法是程序调度单元的基本单位,因此方法的执行效率往往会直接影响整个程序的效率
<4> 程序的系统资源的消耗:
这一点主要是针对资源消耗和效率之间提出的问题,这也是很典型的时间和空间之间的权衡利弊(内存欧巴)
<5> 对UI的合理设计
针对Java的优化原则:
一、用静态工厂方法代替构造方法:
a) 获取实例的方法名更加灵活
b) 可以灵活的使用之前创造的对象,比如设计模式里单例模式的实现
c) 返回实例也比较灵活,不一定是本类的对象
#####注意,也不要一味照搬,要按照具体情况运用#####
二、避免创建重复的对象:
一提到这个问题,就不得不让人想起Java中一个特别经典的案例:Stirng,StringBuilder,StringBuffer三基友的关系,其实主要是Stirng和后两者之间(具体关系我就不明说了,学了java的人都知道,哈哈,不知道的赶紧去Baidu,Google)。在我们使用字符串拼接的时候,最好能够使用后两者中的一个,当然啦,如果是数量次数比较少,这个要求就不是特别硬性了
还有就是方法在调用的时候尽量要避免重复地在方法体内创建同样的对象,我们可以将对象的创建放在类的静态代码块中,让它在类加载的同时就创建好,之后多次复用即可......
三、防止内存泄露:
(科普:内存泄露即就是使用完毕的内存空间因未及时释放后失去引用而导致无法处理的内存垃圾在内存中的堆积)
public class Stack{
private Person[] persons;
private int currentIndex;.....
public Person pop()// method 1
{
if(currentIndex== 0)
throw new Exception();
currentIndex--;
return persons[currentIndex] ;
}
public Person pop2()// method2
{
if(currentIndex== 0)
throw new Exception();
currentIndex--;
Person person= persons[currentIndex];
persons[currentIndex] = null;//设置为空,提示开始回收该内存块
return person;
}
<span style="white-space:pre"> </span>}
大家
可以看看上边这个自定义的堆栈类,对比一下两种弹栈方式以及今后入栈会造成的不同的后果
四、返回0长度的集合而非null
五、通过接口引用对象
避免ANR
性能检测
一、执行时间的检测:
二、内存消耗测试:
三、性能测试工具traceview
package com.bob.studiodev; import android.app.Activity; import android.os.Bundle; import android.os.Debug; import android.view.View; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { private List<Integer> list = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void test1() {//向内存中写入10000个数据 for (int i = 0; i < 10000;i++) { list.add(i); } } public void test2() {//向内存中读取10000个数据 for (int i = 0; i < 10000;i++) { list.get(i); } } public void onClick(View view) { Debug.startMethodTracing("activity_trace");//开始检测 test1(); test2(); Debug.stopMethodTracing();//结束检测 } }
-------------------------------------------------------------------------完-------------------------------------------------------------------------------
ps:本人任何博客为保持有效性,会不定期更新的~~~欢迎大家来访