3

さて、私のアプリケーションでは、startActivityforResultとしてAndroidのデフォルトのカメラとギャラリーを使用しています。

Intent i = new Intent("android.intent.action.PICK",
                       MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
i.setType("image/*");
startActivityForResult(i, this.SELECT_PICTURE);

onActivityResultもキャッチできます。ただし、メモリが少なく、このアクティビティを開始すると、システムが親アクティビティを強制終了し、アクティビティが値を返しても、すべてのローカル変数を失いました(そして、onCreate()が再度呼び出されます)。onResume()のみを再度呼び出す必要があります。

何度か試しましたが、メモリの問題に関係していると確信しています。十分なメモリがある場合、プロセスは正常に実行されます。どうすればこの動作を防ぐことができますか?

Androidはフォアグラウンドでアプリケーションを強制終了しないので、この機能を引き続き使用できますか?私の問題はこれとほとんど同じだと思います。


解決

Yahelが提供するソリューションに加えて、次の方法を使用できます。

@Override
public void onSaveInstanceState(Bundle savedInstanceState){
   super.onSaveInstanceState(savedInstanceState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
   super.onRestoreInstanceState(savedInstanceState);
}
4

2 に答える 2

9

必読のコード記事をよく読む必要があります:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

メモリが少ない場合、アクティビティはAndroidによって強制終了される可能性があります。しかし、それは通知され、これに対処するための非常に明確な方法があります。

これが、作成時のBundle savedInstanceStateすべてのアクティビティに存在する理由です。public void onCreate(Bundle savedInstanceState)

アプリの一時停止中に、アプリの状態を再作成するために必要なすべてを保存する必要があります。アプリの作成中に、完全なsavedInstanceStateで戻ってくるかどうかを確認し、そこからアプリを復元する必要があります。

幸運を。

于 2012-01-24T15:26:24.450 に答える
1

ある種の永続ストレージの使用を検討しましたか?新しいインテントを呼び出す前に、何らかの再構築フラグを使用して、永続ストレージ(共有設定、データベース、ファイルシステムなど)に保存する必要のあるデータを保存します。次に、アクティビティがonCreateを呼び出し、フラグが上がっている場合、以前のアクティビティの状態を復元できます。不要な場合は、onResumeにある再構築フラグを必ずクリアしてください。

編集:

onSaveInstanceStateは、アクティビティにローカルなデータの方法のようです。

于 2012-01-24T15:04:07.980 に答える