14

Android プロジェクトの実装を正常に完了し、アプリのメモリ リークのテストを開始しました。

時々、DeadObjectExceptionアプリで長い旅行をした後、すべてのメモリ割り当てが解放されます。

この問題を検出するにはどうすればよいですか?

メモリ リークを検出するための DDMS ツールについて調査しましDeadObjectExeptionた。

4

2 に答える 2

34

これはメモリ リークの問題ではありません。メモリ リークの定義 (ウィキペディアから):

コンピューター サイエンスにおけるメモリ リーク (または、このコンテキストではリーク) は、コンピューター プログラムがメモリを取得したが、それをオペレーティング システムに解放できなかった場合に発生します。

ここでは、逆のケースがあります。メモリは解放される前に解放されます (少なくともプログラムの観点からは)。

developer.android.com から:

DeadObjectExceptionは RemoteExceptionを拡張します

ホスティング プロセスが存在しないため、呼び出しているオブジェクトは終了しました。

例えば:

クラスMyActivityとがありMyServiceます。Handler/を使用Messengerして、それらの間で通信します。

で とを作成HandlerMessengerMyActivity作成した のインスタンスをMessengerMyService介してに送信しますIntent。次に、いくつかのことを行い、時間が経過すると、 とMyActivityが一緒に破壊されHandlerますMessenger。さて、あなたがそれをうまく処理しないと、彼が持っているものがもはや有効ではないことをMyService知らないMessengerので、彼はそれを介して何かを送ろうとし、取得しますDeadObjectexception:

/* このメッセンジャーのハンドラーにメッセージを送信します。

パラメーター:

message 送信するメッセージ。通常、Message.obtain() を通じて取得されます。

スロー:

RemoteException対象の Handler が存在しない場合、DeadObjectException をスローします。* /

public void send(Message メッセージ) は RemoteException をスローします {...}

于 2012-11-24T18:59:25.170 に答える
0

ネイティブ ライブラリ (.so ファイル) から関数を呼び出す場合は、JNI 関数の作成中に使用されるパッケージ名が、Java クラスでネイティブ メソッドを宣言しているのと同じであることを確認してください。

于 2015-08-03T04:58:19.757 に答える