Androidメモリ関連onTrimMemory,onLowMemory,MemoryInfo()


OnLowMemory
OnLowMemoryはAndroidが提供するAPIで、システムのメモリが不足し、すべてのバックグラウンドプログラム(バックグラウンドで実行されるプロセスではなく優先順位のbackgroundのプロセス)が殺された場合、システムはOnLowMemoryを呼び出す.システムが提供するコールバックには、次のものがあります.
Application.onLowMemory()
Activity.OnLowMemory()
Fragement.OnLowMemory()
Service.OnLowMemory()
ContentProvider.OnLowMemory()
上記システムが提供するAPIに加えて、ComponentCallbacksを独自に実現し、APIで登録することで、OnLowMemoryコールバックも得られる.例:
public static class MyCallback implements ComponentCallbacks {
         @Override
        public void onConfigurationChanged(Configuration arg) {
         }

        @Override
        public void onLowMemory() {
            //do release operation
        }
    }

そして、Context.registerComponentCallbacks()は、適切なタイミングでコールバックを登録すればよい.このようなカスタマイズされた方法により、システムが提供するコンポーネントに限定されることなく、多くの場所でコールバックを登録することができる.
onLowMemoryは,バックグラウンドプログラムが終了してもリソースが不足している場合にこのメソッドを呼び出す.良いアプリケーションは、バックグラウンドプログラムが終了し、フロントアプリケーションのメモリが不足している場合に対処するために、この方法で不要なリソースを解放します.
OnTrimMemory
OnTrimMemoryはAndroid 4.0以降に提供されるAPIで、システムはメモリの状態によってコールバックします.システムが提供するコールバックには、次のものがあります.
Application.onTrimMemory()
Activity.onTrimMemory()
Fragement.OnTrimMemory()
Service.onTrimMemory()
ContentProvider.OnTrimMemory()
OnTrimMemoryのパラメータはint値で、異なるメモリ状態を表します.
TRIM_MEMORY_COMPLETE:メモリが不足しており、バックグラウンドプロセスリストの最後のプロセスは、すぐにクリーンアップされます
TRIM_MEMORY_MODERATE:メモリが不足しており、バックグラウンドプロセスリストの中央にあります.
TRIM_MEMORY_BACKGROUND:メモリが不足しており、このプロセスはバックグラウンドプロセスです.
TRIM_MEMORY_UI_HIDDEN:メモリが不足し、プロセスのUIが表示されなくなりました.
以上の4つは4.0増加
TRIM_MEMORY_RUNNING_CRITICAL:メモリ不足(バックグラウンドプロセスが3個未満)であり、優先度が高いため、メモリをクリーンアップする必要がある
TRIM_MEMORY_RUNNING_LOW:メモリ不足(バックグラウンドプロセスが5個未満)、優先度が高いため、メモリをクリーンアップする必要がある
TRIM_MEMORY_RUNNING_MODERATE:メモリ不足(バックグラウンドプロセスが5個以上)、優先度が高いため、メモリをクリーンアップする必要がある
以上の3つは4.1増加
システムはまた、Context.registerComponentCallback()に登録すると、システムにコールバックされます.
OnLowMemoryとOnTrimMemoryの比較
1,OnLowMemoryがコールバックされたとき、バックグラウンドプロセスはもうありません.onTrimMemoryがコールバックされると、バックグラウンドプロセスもあります.2,OnLowMemoryは最後のバックグラウンドプロセスが殺されたときに呼び出され、一般的にはlow memory killerがプロセスを殺した後にトリガーされる.一方、OnTrimMemoryのトリガは頻繁で、プロセスの優先度を計算するたびに、条件を満たす限りトリガされます.3,ワンタッチクリーンアップでOnLowMemoryはトリガーされずOnTrimMemoryは一度トリガーされます.
使用例:
@Override
public void onTrimMemory(int level) {
    Log.e(TAG, " onTrimMemory ... level:" + level);     
}

@Override
public void onLowMemory() {     
    Log.e(TAG, " onLowMemory ... ");     
}

Activity Managerでプロセスのメモリを表示するには、次の手順に従います.
private void displayBriefMemory() {
    final ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();
    activityManager.getMemoryInfo(info);
    Log.i(TAG, "      :" + (info.availMem >> 10) + "k");
    Log.i(TAG, "           :" + info.lowMemory);
    Log.i(TAG, "         " + (info.threshold >> 10) + "k" + "         ");

    util.SavedToText(TAG, "meminfo        :" + (info.availMem >> 10) + "k"
        + "  " + "           :" + info.lowMemory + "  " + "         "
        + (info.threshold >> 10) + "k" + "         ");
}

友情リンク:
Androidでメモリの表示方法(上)