Androidメモリ関連onTrimMemory,onLowMemory,MemoryInfo()
OnLowMemory
OnLowMemoryはAndroidが提供するAPIで、システムのメモリが不足し、すべてのバックグラウンドプログラム(バックグラウンドで実行されるプロセスではなく優先順位のbackgroundのプロセス)が殺された場合、システムはOnLowMemoryを呼び出す.システムが提供するコールバックには、次のものがあります.
Application.onLowMemory()
Activity.OnLowMemory()
Fragement.OnLowMemory()
Service.OnLowMemory()
ContentProvider.OnLowMemory()
上記システムが提供するAPIに加えて、ComponentCallbacksを独自に実現し、APIで登録することで、OnLowMemoryコールバックも得られる.例:
そして、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は一度トリガーされます.
使用例:
Activity Managerでプロセスのメモリを表示するには、次の手順に従います.
友情リンク:
Androidでメモリの表示方法(上)
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でメモリの表示方法(上)