中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Android內(nèi)存檢測實現(xiàn)

2018-07-20    來源:open-open

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

實現(xiàn)android內(nèi)存檢測的作用在哪里?

當(dāng)你處理一個非常大的圖片縮放的時候,由于使用了ARGB8888的色彩,導(dǎo)致一個像素是4Byte。一個2000×3000分辨率的圖片消耗的內(nèi)存是:23 437.5KB。這時候消耗的內(nèi)存是2.3M的內(nèi)存。android2.2官方ROM最大內(nèi)存是24M,那么打開美圖秀秀,處理一張2000像素的圖的時候就會發(fā)生問題, 4.0官方ROM的話,你的app最大內(nèi)存限制是64M,4.4的時候,內(nèi)存限制是96M。都不是很大,所以內(nèi)存還是很緊張的。

這時候在一些手機(jī)上就會出現(xiàn)OOM的情況。

所以,在遇到這種情況的時候需要先檢測下還能不能再申請內(nèi)存了!

PS:現(xiàn)在很多ROM廠商都修改了最大內(nèi)存限制,我做過測試我的L36H,內(nèi)存限制是256MB。這樣的話可以使用更多的內(nèi)存。但是還有很多品牌沒有做修改,三星是沒有修改4.0  4.2都是64M,moto也沒有,Nexus 系列更是 沒有修改。



這里我寫了個工具類,供使用的時候操作,獲取手機(jī)剩余內(nèi)存和app的剩余可消耗的內(nèi)存。


廢話不說直接上代碼!

package com.commons.utils.memory;  
import android.annotation.TargetApi;  
import android.app.ActivityManager;  
import android.content.Context;  
import android.os.Build;  
import android.util.Log;  
  
/** 
 *內(nèi)存的工具類 
 */  
public class MemoryUtils {  
  
    private static final String TAG="MemoryUtils";  
  
    /** 
     * 打印當(dāng)前手機(jī)內(nèi)存信息應(yīng)用的內(nèi)存信息 
     */  
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)  
    public static void printMemoryInfo()  
    {  
        final String TAG="MemoryUtils.printMemoryInfo()";  
        //打印當(dāng)前APP內(nèi)存信息  
  
        //開啟了  android:largeHeap="true" 后,就是啟用了流氓應(yīng)用的內(nèi)存限制  
        //打印當(dāng)前應(yīng)用內(nèi)存信息  
        Runtime rt = Runtime.getRuntime();  
        Log.d(TAG, "APP當(dāng)前內(nèi)存狀態(tài): 最大可申請內(nèi)存:" + rt.maxMemory() / 1024/1024 +"MB 已申請內(nèi)存:" + rt.totalMemory() / 1024/1024 +  "MB 空閑內(nèi)存:"+rt.freeMemory()/1024/1024+"MB");  
  
    }  
  
  
    /** 
     * 獲得app可用內(nèi)存的字節(jié)數(shù)  這個類不需要try,catch理論上不會報錯 
     */  
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)  
    public static long getAppSurplusMe()  
    {  
        final String TAG="MemoryUtils.getAppSurplusMe()";  
  
        Runtime rt = Runtime.getRuntime();  
        //一下參數(shù)單位為字節(jié)數(shù)  
        long totalMemory=rt.totalMemory();//這個是已經(jīng)申請的內(nèi)存,等于已經(jīng)使用的內(nèi)存加上空閑內(nèi)存  
        long maxMemory=rt.maxMemory();//最大內(nèi)存限制  
        long freeMemory=rt.freeMemory();  
  
        //假如最大內(nèi)存限制是64M,已經(jīng)申請了34M,空閑4M,那么其實當(dāng)前使用的是:(34-4)M,而實際當(dāng)前有效可使用的內(nèi)存是:64-(34-4)=34;  
        //64-(34-4)=34   請允許我引用高數(shù)老師的那句話:"同理可得" 64-34+4  
        //so  
        long surplusMemory=maxMemory-totalMemory+freeMemory;  
        Log.d(TAG, "系統(tǒng)當(dāng)前內(nèi)存狀態(tài): 最大可申請內(nèi)存:" + rt.maxMemory() / 1024/1024 +"MB 已申請內(nèi)存:" + rt.totalMemory() / 1024/1024 +  "MB 空閑內(nèi)存:"+rt.freeMemory()/1024/1024+"MB");  
  
        return surplusMemory;  
    }  
  
    /** 
     * 獲得手機(jī)可用內(nèi)存的字節(jié)數(shù)  這個類不需要try,catch,理論上不會報錯 
     * 
     * 這個方法要慎用  容易導(dǎo)致崩潰  特別在引導(dǎo)頁的時候  低內(nèi)存手機(jī)容易發(fā)生崩潰 
     * 
     * @param context 
     * @return 
     */  
    public static long getPhoneSurplusMe(Context context)  
    {  
        ActivityManager am = (ActivityManager)context.getSystemService(context.ACTIVITY_SERVICE);  
        ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();  
        am.getMemoryInfo(mi);  
        return mi.availMem;  
    }  
  
}
 來自:http://blog.csdn.net/weizongwei5/article/details/41894783 


標(biāo)簽: 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:發(fā)送郵件的PHP類

下一篇: Android游戲閃屏實現(xiàn)步驟詳解