メモリ最適化を適用するOnLowMemory&OnTrimMemory
8212 ワード
1.アプリケーションメモリonLowMemory&onTrimMemory最適化
onLowMemory&onTrimMemory概要:OnLowMemoryはAndroidが提供するAPIで、システムメモリが不足し、すべてのバックグラウンドプログラム(バックグラウンドで実行されるプロセスではなく優先順位がbackgroundのプロセス)が殺された場合、システムはOnLowMemoryを呼び出す.OnTrimMemoryはAndroid 4.0以降に提供されるAPIで、システムはメモリの状態によってコールバックします.メモリのステータスに応じて、異なるメモリ解放ポリシーに応答します.
1.1 onLowMemory&onTrimMemory最適化、どのようなリソースを解放する必要がありますか?
メモリが不足している場合、OnLowMemory/OpenTrimMemoryがコールバックされ、コールバックメソッドでリソースを解放するコードを記述する必要があります.リソースが緊張している場合、UIで使用されるリソース:Bitmap、配列、コントロールリソースを解放できます.
1.2 OnLowMemory
OnLowMemoryはAndroidが提供するAPIで、システムのメモリが不足し、すべてのバックグラウンドプログラム(バックグラウンドで実行されるプロセスではなく優先順位のbackgroundのプロセス)が殺された場合、システムはOnLowMemoryを呼び出す.システムが提供するコールバックは、Application.onLowMemory()Activity.OnLowMemory()Fragement.OnLowMemory()Service.OnLowMemory()ContentProvider.OnLowMemory()は,上記システムが提供するAPIに加えて,ComponentCallbackを独自に実現し,API登録によりOnLowMemoryコールバックを得ることができる.例えば、public static class MyCallback implements ComponentCallback{@Override public void onConfiguration Changed(}@Override public void onLowMemory()/do release operation}}その後、Context.registerComponentCallbacks()は、適切なタイミングでコールバックを登録すればよい.このようなカスタマイズされた方法により、システムが提供するコンポーネントに限定されることなく、多くの場所でコールバックを登録することができる.onLowMemoryは,バックグラウンドプログラムが終了してもリソースが不足している場合にこのメソッドを呼び出す.良いアプリケーションは、バックグラウンドプログラムが終了し、フロントアプリケーションのメモリが不足している場合に対処するために、この方法で不要なリソースを解放します.
1.3 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()に登録すると、システムにコールバックされます.
1.4 OnLowMemoryとOnTrimMemoryの比較
1,OnLowMemoryがコールバックされたとき、バックグラウンドプロセスはもうありません.onTrimMemoryがコールバックされると、バックグラウンドプロセスもあります.2,OnLowMemoryは最後のバックグラウンドプロセスが殺されたときに呼び出され、一般的にはlow memory killerがプロセスを殺した後にトリガーされる.一方、OnTrimMemoryのトリガは頻繁で、プロセスの優先度を計算するたびに、条件を満たす限りトリガされます.3,ワンタッチクリーンアップでOnLowMemoryはトリガーされずOnTrimMemoryは一度トリガーされます.使用例:
2.システムコールバック最適化2.1コールバック原理:Application、Activity、Fragment、Service、ContentProviderでコールバック方法を書き換え、OnLowMemory/onTrimMemoryをコールバックし、コールバック方法で資源解放の実現を実現する.Activityを例にとると、ActivityソースコードにはonTrimMemoryの定義が見られるので、コールバック時にメソッドを書き換えるとよい.
2.2リソースの解放:onTrimMemoryでリソースを解放し、ピクチャ、配列、キャッシュなどのリソースを解放する.
Bitmapを解放するコードクリップの例を次に示します.
List占用方法:list.clear();そして空にしています.
3.ComponentCallbacksの実装
OnLowMemoryは、上記のシステムが提供するAPIに加えて、ComponentCallbackを独自に実現し、APIで登録することで、OnLowMemoryコールバックを得ることができます.例:
カスタムコールバッククラスを登録するには、次の手順に従います.
コールバック後に書き換えることができます.
onLowMemory&onTrimMemory概要:OnLowMemoryはAndroidが提供するAPIで、システムメモリが不足し、すべてのバックグラウンドプログラム(バックグラウンドで実行されるプロセスではなく優先順位がbackgroundのプロセス)が殺された場合、システムはOnLowMemoryを呼び出す.OnTrimMemoryはAndroid 4.0以降に提供されるAPIで、システムはメモリの状態によってコールバックします.メモリのステータスに応じて、異なるメモリ解放ポリシーに応答します.
1.1 onLowMemory&onTrimMemory最適化、どのようなリソースを解放する必要がありますか?
メモリが不足している場合、OnLowMemory/OpenTrimMemoryがコールバックされ、コールバックメソッドでリソースを解放するコードを記述する必要があります.リソースが緊張している場合、UIで使用されるリソース:Bitmap、配列、コントロールリソースを解放できます.
1.2 OnLowMemory
OnLowMemoryはAndroidが提供するAPIで、システムのメモリが不足し、すべてのバックグラウンドプログラム(バックグラウンドで実行されるプロセスではなく優先順位のbackgroundのプロセス)が殺された場合、システムはOnLowMemoryを呼び出す.システムが提供するコールバックは、Application.onLowMemory()Activity.OnLowMemory()Fragement.OnLowMemory()Service.OnLowMemory()ContentProvider.OnLowMemory()は,上記システムが提供するAPIに加えて,ComponentCallbackを独自に実現し,API登録によりOnLowMemoryコールバックを得ることができる.例えば、public static class MyCallback implements ComponentCallback{@Override public void onConfiguration Changed(}@Override public void onLowMemory()/do release operation}}その後、Context.registerComponentCallbacks()は、適切なタイミングでコールバックを登録すればよい.このようなカスタマイズされた方法により、システムが提供するコンポーネントに限定されることなく、多くの場所でコールバックを登録することができる.onLowMemoryは,バックグラウンドプログラムが終了してもリソースが不足している場合にこのメソッドを呼び出す.良いアプリケーションは、バックグラウンドプログラムが終了し、フロントアプリケーションのメモリが不足している場合に対処するために、この方法で不要なリソースを解放します.
1.3 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()に登録すると、システムにコールバックされます.
1.4 OnLowMemoryとOnTrimMemoryの比較
1,OnLowMemoryがコールバックされたとき、バックグラウンドプロセスはもうありません.onTrimMemoryがコールバックされると、バックグラウンドプロセスもあります.2,OnLowMemoryは最後のバックグラウンドプロセスが殺されたときに呼び出され、一般的にはlow memory killerがプロセスを殺した後にトリガーされる.一方、OnTrimMemoryのトリガは頻繁で、プロセスの優先度を計算するたびに、条件を満たす限りトリガされます.3,ワンタッチクリーンアップでOnLowMemoryはトリガーされずOnTrimMemoryは一度トリガーされます.使用例:
1 @Override
2 public void onTrimMemory(int level) {
3 Log.e(TAG, " onTrimMemory ... level:" + level);
6 }
7
8 @Override
9 public void onLowMemory() {
11 Log.e(TAG, " onLowMemory ... ");
13 }
2.システムコールバック最適化2.1コールバック原理:Application、Activity、Fragment、Service、ContentProviderでコールバック方法を書き換え、OnLowMemory/onTrimMemoryをコールバックし、コールバック方法で資源解放の実現を実現する.Activityを例にとると、ActivityソースコードにはonTrimMemoryの定義が見られるので、コールバック時にメソッドを書き換えるとよい.
public void onTrimMemory(int level) {
if (DEBUG_LIFECYCLE) Slog.v(TAG, "onTrimMemory " + this + ": " + level);
mCalled = true;
mFragments.dispatchTrimMemory(level);
}
2.2リソースの解放:onTrimMemoryでリソースを解放し、ピクチャ、配列、キャッシュなどのリソースを解放する.
@Override
public void onTrimMemory(int level) {
// TODO Auto-generated method stub
DLog.d(" onTrimMemory ... level:" + level);
switch(level)
{
case TRIM_MEMORY_UI_HIDDEN:
//
/* */
}
break;
}
super.onTrimMemory(level);
}
Bitmapを解放するコードクリップの例を次に示します.
//
if(bitmap != null && !bitmap.isRecycled()){
// null
bitmap.recycle();
bitmap = null;
}
System.gc();
List占用方法:list.clear();そして空にしています.
3.ComponentCallbacksの実装
OnLowMemoryは、上記のシステムが提供するAPIに加えて、ComponentCallbackを独自に実現し、APIで登録することで、OnLowMemoryコールバックを得ることができます.例:
public static class ViewComponentCallbacks implements ComponentCallbacks {
@Override
public void onConfigurationChanged(Configuration arg) {
}
@Override
public void onLowMemory() {
//do release operation
}
}
カスタムコールバッククラスを登録するには、次の手順に従います.
ViewComponentCallbacks callBacks =new ViewComponentCallbacks();
this.registerComponentCallbacks( callBacks );
コールバック後に書き換えることができます.
@Override
public void onLowMemory() {
// TODO Auto-generated method stub
//
super.onLowMemory();
}