2018-07-06 - 草稿

在沒有JIT(Just In Time Compiler)時鹃栽,直接訪問變量的速度是調用getter的3倍。有JIT時旨涝,直接訪問變量的速度是通過getter訪問的7倍。

使用ArrayList時缚态,for-i循環(huán)會快3倍(不管有沒有JIT),但是對于其他collection堤瘤,增強的for-each循環(huán)寫法會和迭代器寫法的效率一樣玫芦。

Android系統(tǒng)中float類型的數據存取速度是int類型的一半,盡量優(yōu)先采用int類型本辐。
就速度而言桥帆,現代硬件上,float 和 double 的速度是一樣的慎皱±铣妫空間而言,double 是兩倍float的大小茫多。在空間不是問題的情況下祈匙,你應該使用 double 。
同樣,對于整型夺欲,有些處理器實現了硬件幾倍的乘法跪帝,但是沒有除法。這時些阅,整型的除法和取余是在軟件內部實現的伞剑,這在你使用哈希表或大量計算操作時要考慮到。

為了能夠接收到用戶離開你的UI時的通知市埋,你需要實現Activtiy類里面的onTrimMemory()回調方法黎泣。你應該使用這個方法來監(jiān)聽到TRIM_MEMORY_UI_HIDDEN級別的回調,此時意味著你的UI已經隱藏腰素,你應該釋放那些僅僅被你的UI使用的資源聘裁。

  1. 當內存緊張時釋放部分內存

在你的app生命周期的任何階段,onTrimMemory的回調方法同樣可以告訴你整個設備的內存資源已經開始緊張弓千。你應該根據onTrimMemory回調中的內存級別來進一步決定釋放哪些資源。

TRIM_MEMORY_RUNNING_MODERATE:你的app正在運行并且不會被列為可殺死的献起。但是設備此時正運行于低內存狀態(tài)下洋访,系統(tǒng)開始觸發(fā)殺死LRU Cache中的Process的機制。
TRIM_MEMORY_RUNNING_LOW:你的app正在運行且沒有被列為可殺死的谴餐。但是設備正運行于更低內存的狀態(tài)下姻政,你應該釋放不用的資源用來提升系統(tǒng)性能(但是這也會直接影響到你的app的性能)。
TRIM_MEMORY_RUNNING_CRITICAL:你的app仍在運行岂嗓,但是系統(tǒng)已經把LRU Cache中的大多數進程都已經殺死汁展,因此你應該立即釋放所有非必須的資源。如果系統(tǒng)不能回收到足夠的RAM數量厌殉,系統(tǒng)將會清除所有的LRU緩存中的進程食绿,并且開始殺死那些之前被認為不應該殺死的進程,例如那個包含了一個運行態(tài)Service的進程公罕。
同樣器紧,當你的app進程正在被cached時,你可能會接受到從onTrimMemory()中返回的下面的值之一:

TRIM_MEMORY_BACKGROUND: 系統(tǒng)正運行于低內存狀態(tài)并且你的進程正處于LRU緩存名單中最不容易殺掉的位置楼眷。盡管你的app進程并不是處于被殺掉的高危險狀態(tài)铲汪,系統(tǒng)可能已經開始殺掉LRU緩存中的其他進程了。你應該釋放那些容易恢復的資源罐柳,以便于你的進程可以保留下來掌腰,這樣當用戶回退到你的app的時候才能夠迅速恢復。
TRIM_MEMORY_MODERATE: 系統(tǒng)正運行于低內存狀態(tài)并且你的進程已經已經接近LRU名單的中部位置张吉。如果系統(tǒng)開始變得更加內存緊張齿梁,你的進程是有可能被殺死的。
TRIM_MEMORY_COMPLETE: 系統(tǒng)正運行與低內存的狀態(tài)并且你的進程正處于LRU名單中最容易被殺掉的位置芦拿。你應該釋放任何不影響你的app恢復狀態(tài)的資源士飒。
因為onTrimMemory()的回調是在API 14才被加進來的查邢,對于老的版本,你可以使用onLowMemory)回調來進行兼容酵幕。onLowMemory相當與TRIM_MEMORY_COMPLETE扰藕。

Note: 當系統(tǒng)開始清除LRU緩存中的進程時,盡管它首先按照LRU的順序來操作芳撒,但是它同樣會考慮進程的內存使用量邓深。因此消耗越少的進程則越容易被留下來。

檢查你應該使用多少的內存
正如前面提到的笔刹,每一個Android設備都會有不同的RAM總大小與可用空間芥备,因此不同設備為app提供了不同大小的heap限制。你可以通過調用getMemoryClass())來獲取你的app的可用heap大小舌菜。如果你的app嘗試申請更多的內存萌壳,會出現OutOfMemory的錯誤。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末日月,一起剝皮案震驚了整個濱河市袱瓮,隨后出現的幾起案子,更是在濱河造成了極大的恐慌爱咬,老刑警劉巖尺借,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異精拟,居然都是意外死亡燎斩,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門蜂绎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栅表,“玉大人,你說我怎么就攤上這事荡碾〗鞫粒” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵坛吁,是天一觀的道長劳殖。 經常有香客問我,道長拨脉,這世上最難降的妖魔是什么哆姻? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮玫膀,結果婚禮上矛缨,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好箕昭,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布灵妨。 她就那樣靜靜地躺著,像睡著了一般落竹。 火紅的嫁衣襯著肌膚如雪泌霍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天述召,我揣著相機與錄音朱转,去河邊找鬼。 笑死积暖,一個胖子當著我的面吹牛藤为,可吹牛的內容都是我干的。 我是一名探鬼主播夺刑,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缅疟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了性誉?” 一聲冷哼從身側響起窿吩,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎错览,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體煌往,經...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡倾哺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了刽脖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羞海。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖曲管,靈堂內的尸體忽然破棺而出却邓,到底是詐尸還是另有隱情,我是刑警寧澤院水,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布腊徙,位于F島的核電站,受9級特大地震影響檬某,放射性物質發(fā)生泄漏撬腾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一恢恼、第九天 我趴在偏房一處隱蔽的房頂上張望民傻。 院中可真熱鬧,春花似錦、人聲如沸漓踢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喧半。三九已至奴迅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間薯酝,已是汗流浹背半沽。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吴菠,地道東北人者填。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像做葵,于是被迫代替她去往敵國和親占哟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容