本篇主要說些Android性能優(yōu)化的幾種方法坐漏,主要包括布局優(yōu)化碧信、繪制優(yōu)化砰碴、內(nèi)存泄漏優(yōu)化板丽、響應(yīng)速度優(yōu)化、ListView優(yōu)化猖辫、Bitmap優(yōu)化砚殿、線程優(yōu)化及一些優(yōu)化的建議
一. 布局優(yōu)化:
布局優(yōu)化主要思想就是盡量減少布局文件的層級,因為布局文件中的層級少了辛萍,Android繪制時工作量也就減少了,性能自然就提高了羡藐。
二. 繪制優(yōu)化:
繪制優(yōu)化指的是View的onDraw方法中避免大量的操作仆嗦,主要體現(xiàn)以下兩個方面:
1、onDraw中不要創(chuàng)建新的局部對象谆甜。因為onDraw方法可能會被頻繁的調(diào)用邢隧,這樣就會在一瞬間產(chǎn)生大量的臨時對象冈在,這樣不僅占用了過多的內(nèi)存包券,而且還會導(dǎo)致系統(tǒng)更新頻繁的gc,降低了程序的執(zhí)行效率。
2付秕、onDraw中不要做耗時任務(wù)侍郭,也不能執(zhí)行成千上萬次的的循環(huán)操作
三. 內(nèi)存泄露優(yōu)化:
- 靜態(tài)導(dǎo)致的內(nèi)存泄露
public class MainActivity extends AppCompatActivity {
private static Context sContext;
private static View sView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sContext = this;//activity無法正常銷毀掠河,因為靜態(tài)變量sContext引用了它
sView = new View(this);//sView是一個靜態(tài)變量唠摹,它內(nèi)部持有了當(dāng)前activity,所以activity無法釋放
}
}
- 屬性動畫導(dǎo)致的內(nèi)存泄露(資源釋放不及時)
解決方案:在onDestroy()中animator.cancel();
其他需要釋放的資源
四. 響應(yīng)速度優(yōu)化
響應(yīng)速度優(yōu)化核心是避免在主線程中做耗時操作奉瘤,耗時操作采用異步的方式執(zhí)行
五. ListView和Bitmap優(yōu)化
1、 ListView優(yōu)化
- 使用ViewHolder并避免在getView()中執(zhí)行耗時操作
- 根據(jù)列表滑動狀態(tài)來控制人物的執(zhí)行藕赞,滑動的時候不加載卖局,停止滑動時在加載
- 可以嘗試開啟硬件加速使ListView滑動更加流暢
2砚偶、Bitmap優(yōu)化
六. 線程優(yōu)化
線程優(yōu)化的思想是采用線程池,避免程序中存在大量的Thread风钻。線程池可以重用內(nèi)部的線程酒请,從而避免了線程的創(chuàng)建和銷毀所帶來的性能開銷,同時線程池還能有效的控制線程池的最大并發(fā)數(shù)布朦,避免大量的線程因互相搶占系統(tǒng)資源二導(dǎo)致阻塞現(xiàn)象
七. 一些性能優(yōu)化的建議
- 避免創(chuàng)建過多的對象
- 不要過多使用枚舉昼窗,枚舉占用的內(nèi)存要比整形大
- 常亮使用static final 來修飾
- 使用Android特有的數(shù)據(jù)結(jié)構(gòu)是趴,比如:SpaseArray,Pair
- 適當(dāng)?shù)氖褂密浺煤腿粢?/li>
- 采用內(nèi)存緩存和磁盤緩存
- 盡量使用靜態(tài)內(nèi)部類,這樣可以避免潛在的由于內(nèi)部類而導(dǎo)致的內(nèi)存泄露
說明:文章參考《開發(fā)藝術(shù)探索》一書
這篇也不錯:https://www.cnblogs.com/cr330326/p/8011523.html