2011-12-18 11 views
9

iOSでは、単一のUIViewControllerを使用してアプリケーション全体を記述し、UIView階層内にアプリケーション全体を単純に追加することができます。メモリ状況が悪いときにUIViewControllerが通知を受け取るので、これは正常です。開発者は手動でメモリ管理/最適化を行うことができます。単一アクティビティ、複数のフラグメントに基づくAndroidアプリケーション

Androidにこれに相当するものはありますか?
1つのアクティビティにアプリケーション全体を書き込み、これにフラグメントをスタックすることはできますか?
これは、私が理解するところではメモリ使用量にどのような影響がありますか?これはアクティビティのライフサイクル管理を迂回し、フラグメント全体がメモリに残るか、間違っていますか?

答えて

4

Androidにはこれと同等の機能はありますか?

メモリ管理の観点からではありません。ヒープスペースが少ないと明示されていません。 SoftReferenceのようなものを使うと助けになるかもしれませんが、それは仮想マシンレベルでのことです。

アプリケーション全体を1つのアクティビティで記述し、この上にフラグメントをスタックすることはできますか?

したい場合は、はい。この限り私は理解したように、メモリ使用状況にあろうものな意味

、回避のこの活動のライフサイクル管理およびフラグメントのスタック全体がメモリ内に残っているだろう - あるいは私が間違っていますか?

「全体のフラグメントのスタック」は、1つのアクティビティまたはN個のアクティビティによってホストされているかどうかに関係なく、メモリに格納されます。

+1

N個のアクティビティによってホストされている場合は、アクティビティのライフサイクル管理の一部になります。それらがすべて単一のビューにある場合、これは単一のアクティビティが唯一可視であるため、すべてのフラグメントとともに常にメモリ内にあることを意味しません – user204884

+3

@ user204884:アクティビティは、手動で 'finish()'するか、またはユーザがBACKを押した場合(通常のBACKボタン処理を許可する場合)、処理が終了します。したがって、デフォルトでは、1つのアクティビティに対してN個のアクティビティを持つことは、フラグメントに関して同じメモリフットプリントを持つことができます。 N個のアクティビティ*を持つことでメモリフットプリントを減らすことはできますが、それは保証されません。私の答えでそれをより明確にしていないことに対する私の謝罪。 – CommonsWare

+1

@CommonsWare私はあなたの答えを受け入れるが、メモリをクリアするためにそれらを保持しているアクティビティとともに、すべてのフラグメントを時間通りに削除する方法を受け入れる。すぐにメモリをクリアするか、それとも時間がかかりますか? – TNR

関連する問題