Android プロジェクトの実装を正常に完了し、アプリのメモリ リークのテストを開始しました。
時々、DeadObjectException
アプリで長い旅行をした後、すべてのメモリ割り当てが解放されます。
この問題を検出するにはどうすればよいですか?
メモリ リークを検出するための DDMS ツールについて調査しましDeadObjectExeption
た。
Android プロジェクトの実装を正常に完了し、アプリのメモリ リークのテストを開始しました。
時々、DeadObjectException
アプリで長い旅行をした後、すべてのメモリ割り当てが解放されます。
この問題を検出するにはどうすればよいですか?
メモリ リークを検出するための DDMS ツールについて調査しましDeadObjectExeption
た。
これはメモリ リークの問題ではありません。メモリ リークの定義 (ウィキペディアから):
コンピューター サイエンスにおけるメモリ リーク (または、このコンテキストではリーク) は、コンピューター プログラムがメモリを取得したが、それをオペレーティング システムに解放できなかった場合に発生します。
ここでは、逆のケースがあります。メモリは解放される前に解放されます (少なくともプログラムの観点からは)。
developer.android.com から:
DeadObjectExceptionは RemoteExceptionを拡張します
ホスティング プロセスが存在しないため、呼び出しているオブジェクトは終了しました。
例えば:
クラスMyActivity
とがありMyService
ます。Handler
/を使用Messenger
して、それらの間で通信します。
で とを作成Handler
しMessenger
、MyActivity
作成した のインスタンスをMessenger
をMyService
介してに送信しますIntent
。次に、いくつかのことを行い、時間が経過すると、 とMyActivity
が一緒に破壊されHandler
ますMessenger
。さて、あなたがそれをうまく処理しないと、彼が持っているものがもはや有効ではないことをMyService
知らないMessenger
ので、彼はそれを介して何かを送ろうとし、取得しますDeadObjectexception
:
/* このメッセンジャーのハンドラーにメッセージを送信します。
パラメーター:
message 送信するメッセージ。通常、Message.obtain() を通じて取得されます。
スロー:
RemoteException対象の Handler が存在しない場合、DeadObjectException をスローします。* /
public void send(Message メッセージ) は RemoteException をスローします {...}
ネイティブ ライブラリ (.so ファイル) から関数を呼び出す場合は、JNI 関数の作成中に使用されるパッケージ名が、Java クラスでネイティブ メソッドを宣言しているのと同じであることを確認してください。