Question: I have successfully finished an Android project's implementation and started to test the app for memory leaks. 

Sometimes, I get `DeadObjectException`after a long trip in the app and all of the memory allocations are freed.

How can I detect this problem?

I have made some research about DDMS tools to detect memory leaks, Due to I have no idea about `DeadObjectExeption`, I don't know where to start.

Answer: 
This is not a memory leak problem. Definition of the memory leak (from Wikipedia):

> 
> A memory leak, in computer science (or leakage, in this context),
>  occurs when a computer program acquires memory but fails to release it
>  back to the operating system.
> 
> 
> 

Here, you have an opposite case - memory is freed before it should (at least from your program's point of view).

From developer.android.com:

> 
> **DeadObjectException** extends RemoteException
> 
> 
> **The object you are calling has died, because its hosting process no longer exists.**
> 
> 
> 

For example:

You have the classes `MyActivity` and `MyService`. You use `Handler`/`Messenger` to communicate between them.

You create `Handler` and `Messenger` in `MyActivity`, and then send created instance of `Messenger` to `MyService` via an `Intent`. Then you do some stuff, time passes, and your `MyActivity` gets destroyed, together with it's `Handler` and `Messenger`. Now, if you don't handle that well, `MyService` won't know that `Messenger` that he has is not valid any more, so, he tries to send something through it, and get `DeadObjectexception`: 

> 
> /\*
>  Send a Message to this Messenger's Handler.
> 
> 
> Parameters:
> 
> 
> message The Message to send. Usually retrieved through Message.obtain().
> 
> 
> Throws:
> 
> 
> RemoteException **Throws DeadObjectException if the target Handler no longer exists.\***/
> 
> 
> public void send(Message message) throws RemoteException {...}
> 
> 
>
If You are calling any function from Native Library(.so file), Just check the package name used while creating JNI function is same as you are declaring native method in Java class.