0

アプリケーションで何が起こっているのかわかりません。私のアプリの構造:

EventListActivity (List of events)
 EventDetailActivity (Detail of selected event and button to open list of persons)
  EventPersonsListActiviy (List of persons who connected to the event
   EventPersonDetialActivity  (Detail of selected person)

アプリケーションを起動すると、次のmeminfoが表示されます。

               native   dalvik    other  total      limit     bitmap  nativeBitmap
allocated:     5257     6620      N/A    11877      N/A       28      661

ツリーを通過した後、EventPersonDetialActivityにいるときにこれを取得しました

               native  dalvik    other  total      limit     bitmap  nativeBitmap
allocated:     5690     6740      N/A    12430      N/A       149      661

しかし、メニューからEventListActivityを再度開くと。ただし、アクティビティを開始する前に、すべての最新のアクティビティを閉じます(リストを含むHistoryManagerがあり、アクティビティを開くとリストに追加し、再度開始する前に、アクティビティに対してfinish()メソッドを呼び出します。リストをクリアします。)そして、onDestroyのすべてのアクティビティで、すべての変数をnullに設定し、System.gc()を呼び出します。しかし、私はこれを手に入れました:

               native  dalvik    other  total      limit     bitmap  nativeBitmap
allocated:     5663    7193      N/A    12856      N/A       135      661

3番目のケースの合計メモリ使用量が最初のケースよりも大きいのはなぜですか?メモリ内にある間、EventListActivityのみがありますか?そして、私がこのメソッドにたくさん答えると、私はついにメモリを使い果たしました:(

4

2 に答える 2

0

すべてのSystem.gc()を手動で実行しないでください。これにより、dalvikVMのパフォーマンスが大幅に低下します。Androidに仕事を任せましょう。

複数の場所でアクティビティ間で共有されているオブジェクトへの参照を保持していますか?

于 2012-06-18T15:43:50.117 に答える
0

それを理解するためにこれを行います:

  1. EventListActivityに数回アクセスし、上昇するまで(ただし、クラッシュする前に)メモリ使用量を確認します。
  2. ヒープダンプを取る
  3. jhatを使用してヒープダ​​ンプを調べます
  4. すべてのクラスのすべてのインスタンスを確認します(システムを除く)
  5. リストの上部に、各アクティビティおよびその他の関連するクラスのインスタンスの数が表示されます。これは、どのオブジェクトが適切に解放されていないかを判断するのに役立ちます。
  6. GCによって収集されるべきであると思われるオブジェクトを参照しているオブジェクトを特定します(「このオブジェクトを参照しているオブジェクト」へのリンクをたどります)。
于 2012-06-18T16:16:02.533 に答える