在講方法前,先來說說一下它的原理,如果沒興趣是也可以直接拉到最下面看作法
Android中的程序是託管的,當系統記憶體資源不足時會發出java.lang.OutOfMemoryError時(即OOM),此時會依照優先順序自動進行程序的回收。 而回收的標準則是透過oom_adj、oom_score、oom_score_adj的值來決定
- oom_score: kernel根據oom_score_adj值,結合該處理程序使用的記憶體量算出的值,後面無論是oom killer還是lmkd都是根據這個值來決定殺哪些處理程序的。
- oom_score_adj: 取值為-1000---1000,如果賦值為-1000將關閉oom killer對他的管理(如init、surfaceflinger等native 處理程序)。它和oom_adj都是kernel留給使用者空間更改處理程序被殺優先順序的介面
Android將程序分為不同等級,它們依優先順序由高到低依序是: