S1E6: Invalidations, Layouts, and Performance
http://wiki.jikexueyuan.com/project/notes/images/layout_three_steps.png" alt="layout_three_steps.png" />
canvas.clipRect()
來幫助系統(tǒng)識別可見區(qū)域,完全在矩形外面的內(nèi)容(組件)將不會繪制、渲染,但有部分在矩形內(nèi)的仍會繪制、渲染;canvas.quickreject()
函數(shù)可以判斷是否和某個矩形相交,如果不相交,則可以直接跳過;S1E8: Memory Churn and performance
http://wiki.jikexueyuan.com/project/notes/images/memory_mode_generation.png" alt="memory_mode_generation.png" />
S1E15: Battery Drain and WakeLocks
adb shell dumpsys batterystats > xxx.txt
, python historian.py xxx.txt > xxx.html
BatteryManager
在代碼中檢測是否正在充電(也可使用JobScheduler來做)S2E6: To Index or Iterate?
int size = list.size();
for (int i = 0; i < size; i++) {
Object object = list.get(i);
...
}
for (Iterator it = list.iterator(); it.hasNext(); ) {
Object object = it.next();
...
}
for (Object object : list) {
...
}
Fcn | Time taken(ms) |
---|---|
for index (ArrayList) | 2603 |
for index (Vector) | 4664 |
for simple (ArrayList) | 5133 |
Iterator (ArrayList) | 5142 |
for simple (Vector) | 11783 |
Iterator (Vector) | 11778 |
setLayerType(View.LAYER_TYPE_HARDWARE, null)
,動畫結(jié)束后,setLayerType(View.LAYER_TYPE_NONE, null)
;在API >= 16時,可以只調(diào)用ViewPropertyAnimator.alpha(0.0f).withLayer()
接口即可;hasOverlappingRendering()
接口,返回false;StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()...build());
和StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()...build());
,如果有隱患,屏幕會閃爍,并且有l(wèi)og輸出View.invalidate()
;盡量使用ClipRect等方法來提高繪制的性能;bitmapOption.inPreferredConfig
好像沒什么用bitmapOption.inSampleSize
屬性,可等比例縮放圖片,而且不會加載原圖到內(nèi)存S2E20: Memory Profiling 101,上文已述
onLowMemory()
,onTrimMemory()
for (int x = 0; x < valueCount; x++) {
cleanFiles[x] = new File(directory, key + "." + x);
dirtyFiles[x] = new File(directory, key + "." + x + ".tmp");
}
===>>>
StringBuilder b = new StringBuilder(key).append(".");
int truncateTo = b.length();
for (int x = 0; x < valueCount; x++) {
b.append(x);
cleanFiles[x] = new File(directory, b.toString());
b.append(".tmp");
dirtyFiles[x] = new File(directory, b.toString());
b.setLength(truncateTo);
}
for (int i = 0, size = list.size(); i < size; i++)