在開發過程當中,咱們常常會遇到RAM不夠用的問題,那麼咱們應該如何優化咱們的App,使他佔用的RAM更少呢?下面,介紹幾個方法吧(也能夠說是幾個原則):api
1、儘可能減小Service的使用: 當你的app須要使用service來處理後臺任務的時候,要保證當前的任務完成時,該service也要中止。另外,要注意的是,當中止這個service的時候,不要引發它的泄漏。 當啓動一個service以後,系統總會保持這個service處於運行狀態。這樣,就會佔用大量的RAM。因此,app的運行效率就會所以下降。 保留沒有用的service最可怕的內存管理錯誤。因此,必定要牢記,沒有必要使用service的時候就不用,用完了必定要記得將它銷燬!!!!緩存
2、儘可能動態註冊BroadCastReceiver使用: 若是一個BroadcastReceiver 用於更新UI,那麼一般會使用這種方法去註冊,在Activity啓動時註冊BroadcastReceiver ,在Activity不可見之後取消註冊。app
3、當界面變爲不可見時,要記得釋放內存: 當用戶跳轉到其餘界面時,而且當前界面再也不可見的時候,要記得釋放當前這個界面中的資源。 當用戶退出某個界面時,記得在你的activity中實現onTrimMemory()(api4.0及以上)這個回調方法。調用這個方法,系統會收集不須要的內佈局
4、當內存變少時,釋放內存: 在你的app運行過程當中,當運行該app的設備所剩的RAM變得不多時,系統就會調用onTrimMemory()這個方法,這個方法中有幾個參數,表示不一樣的狀態。onTrimMemory()的具體使用,還請你們參加Android的開發文檔吧,本人手懶,就不詳細介紹啦。學習
5、檢查你所須要使用的內存: 能夠經過getMemoryClass()估計一下你的app可用的heap。當你的app所須要的內存超過了這個可用值時,好了內存溢出就出現了。 這裏有一個很特殊的方法,能夠經過在manifest <application>標籤中將largeHeap的屬性值設置爲true來請求更大的內存,主要注意的是,若是你採用了這種方法,那麼當你想要獲取可用內存時,就要使用 getLargeMemoryClass()。 不過因爲每臺機器的RAM是有限的,因此用這個仍是當心吧,不須要用的時候仍是不用了吧。優化
6、避免由bitmap引發的內存浪費:
bitmap仍是很佔內存的啊,當咱們使用它的時候必定要當心。有幾個須要注意的方法:編碼
一、不要直接使用這樣會佔用很大的內存,使用BitmapFactory.Options設置inSampleSize,根據手機屏幕大小來設置bitmap的大小, 這樣作能夠減小對系統資源的要求。內存
二、緩存圖像到內存,採用軟引用緩存到內存,而不是在每次使用的時候都重新加載到內存;資源
三、採用低內存佔用量的編碼方式,好比Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省內存;開發
四、最後就是最重要的一點,當bitmap使用完以後必定要記得回收!!!
7、使用優化過的數據容器 儘可能使用 SparseArray, SparseBooleanArray, LongSparseArray 等通過優化的容器類。一般來講HashMap的效率時比較低下的。
8、當心使用抽象類(方法) 適當的使用抽象類和方法可以使咱們的代碼更加靈活、易維護,可是這樣會增長app的內存佔用。因此,那些無關痛癢的東西,仍是別抽象了吧。
除了以上列舉的方法以外還有一些其餘的方法,好比:優化佈局,儘可能減小沒有必要的layout嵌套,屢次使用一個layout時,可使用<include> 標籤,根佈局有時候可使用<merge>標籤等。 先列舉這麼多,歡迎你們補充,互相學習