2012-02-24 5 views
0

私はアンドロイドアプリケーションを構築していますが、 メモリの使用についての質問がありますAndroidメモリの使用

私が必要とするデータの大部分は、xml stringsファイルに格納されている文字列配列です。最初に最大の配列には最大30個のアイテムがあり、2番目にはアプリケーションを使用してアイテムの更新や削除、挿入が行われないため、配列を使用しました。 私が作成したすべてのカスタムアダプターは、以下のグーグルのガイドラインです(ホルダークラスを使用するとすぐに)

ユーザーがアクティビティーを切り替えると、選択に応じてさまざまな配列がリストビューにロードされます。

アンドロイドは、使用されていない場合、各アレイが割り当てるメモリをクリアしますか?私はそれをするべきですか? 私はMATを使って、アプリケーションがメモリをどのように使用しているかをチェックし、リークなどをチェックしました。私はまた、いくつかのPNGアイコン/画像を使用します。 起動時にアプリが5MBになり、ユーザーが遊んでいる間にアプリが最大8.5〜9MBになります。

ありがとうございました!

+0

その使用していない場合、あなたは何をすることによって意味ですか?それについてのリファレンスやアプリのように背景に行く? – Tim

+0

ありがとう! 2番目のシナリオでは、アプリがバックグラウンドで実行され、Androidが制御を引き継ぐからです。 – JcDenton86

+0

Javaの何かについてのリファレンスがない場合は、何が起こるのは、ガベージコレクタが先または後にスペースを解放することです。 – Tim

答えて

1

メモリが必要な場合は、Android OSによってスタック上のアクティビティ(フォーカスなし)が強制終了される可能性があります。あなたのアクティビティがこのようにして殺されると、onSaveInstanceState(Bundle outState)が呼び出されます。文字列配列はここに保存してください。

アクティビティでonCreate(Bundle savedInstanceState)が呼び出された場合、savedInstanceStateがNULLでない場合、アクティビティが以前にOSによって強制終了され、そのバンドルから文字列配列を再配置する必要があることを示します。

例:

String [] stringArray; 
... 

protected void onCreate(Bundle savedInstanceState) 
{ 
    if (savedInstanceState != null) 
    { 
     stringArray = savedInstanceState.getStringArray("some_key"); 
    } 
} 

protected void onSaveInstanceState (Bundle outState) 
{ 
    super.onSaveInstanceState(outState); 
    outState.putStringArray("some_key", stringArray); 
} 

これは、ここでは詳細に説明されていますhttp://developer.android.com/reference/android/app/Activity.html

+0

-so-高速応答のおかげで..私は上記の午後に試してみます。 – JcDenton86