0

私のアプリでは、ユーザーが複数ページの入力(サインアッププロセス)を実行する必要があります。ユーザーがサインアップに深く入り込むにつれて、ユーザーが「終了」をクリックするまでデータをそのまま保持する必要があります。このプロセスには、サブアクティビティを呼び出すアクティビティと、別のサブアクティビティを呼び出すサブアクティビティが含まれます。

フローは次のようになります:メイン->サブアクティビティ(サインアップのパート1)->サブアクティビティ(パート2)->サブアクティビティ(パート3)。

ここでの問題は、logcatからメモリ不足の警告が表示され、ユーザーがアプリの奥深くに入るとさまざまなプロセスが強制終了されることです。カスタムオブジェクトをアクティビティ間で渡すのではなく、mysqlliteに保存し、必要に応じて取得することで、手持ちのメモリを節約しようとしました。追加するもう1つのポイントは、私は画像を扱っておらず、使用されるコントロールはテキストビュー、エディットビュー、スピナーだけです。

私の質問は、複数のサブアクティビティが連鎖している場合、メモリ不足の問題が発生するのは一般的ですか?メモリを解放するにはどうすればよいですか?カスタムコントロールは、プリセットコントロールよりも大幅に多くのメモリを使用しますか?(私の予感の1つ)

*編集*メモリ不足の問題の理由を見つけました。サブアクティビティとは何の関係もありません。原因は、私が使用しているカスタムコントロールです。代わりにプリセットコントロールを使用してテストを行ったところ、アプリの全体的なパフォーマンスが大幅に向上しました。メモリ不足の警告がなくなり、すべてがスムーズに機能するようになりました。

4

1 に答える 1

2

サブアクティビティでメモリの問題が発生することは一般的ではないと思います。それぞれに5つのタブと3〜4のアクティビティがあるタブホストに加えて、複雑なメソッドhttp呼び出しとイメージアダプタを使用しましたが、問題はありませんでした(このようにアクティビティは呼び出しません) onDestroyメソッドですが、onPauseを呼び出してからonResumeを呼び出すだけです)。グローバル変数を少なくしてみてください。ビューを参照し、次のボタンを押して他のアクティビティなどに渡すときにデータを取得するだけで、ガベージコレクターがゴミを収集します。onPauseが呼び出されたときにいくつかの参照を削除し、それらが再度必要な場合は、それらを再度参照するだけです(おそらく、onResumeで)

于 2011-02-21T04:13:36.790 に答える