Great question. I would first have you look at
http://developer.android.com/sdk/ndk/overview.html and read the section “When to Develop in Native Code.“ In general it is best to go to the NDK when you perhaps want to use something in C or C++ that already exists and you cannot either port it to
Java because of time, complexity, or licensing issues. For example one of our clients recently had us integrated a C based DRM system from a large company. That company does not allow you to make change to the DRM system and you essentially have to use their compiled code as is (although they allow cross-compiling and give you the source). So in this case there were real legal/business requirements that forced the use of the C code. In some other cases, such as image processing, image detection, or some other CPU intensive task that does not use a huge amount of memory C might make sense. Furthermore since, in those areas, there is such a wealth of C code that is very well written it would be ease to reuse some C projects and thus those would be good candidates as well. In general though you want to stay away from the NDK unless you have a real need for it.