I have a silly doubt about destroyapp. According to the specification given by java destroyapp will be called by the AMS to destroy the application. So it means there is no use of calling it by ourselves. then how it is decided that the parameter in it is false or true.
the specification is given below:
protected abstract void destroyApp(boolean unconditional)
Signals the MIDlet to terminate and enter the Destroyed state. In the destroyed state the MIDlet must release all resources and save any persistent state. This method may be called from the Paused or Active states.
MIDlets should perform any operations required before being terminated, such as releasing resources or saving preferences or state.
Note: The MIDlet can request that it not enter the Destroyed state by throwing an MIDletStateChangeException. This is only a valid response if the unconditional flag is set to false. If it is true the MIDlet is assumed to be in the Destroyed state regardless of how this method terminates. If it is not an unconditional request, the MIDlet can signify that it wishes to stay in its current state by throwing the MIDletStateChangeException. This request may be honored and the destroy() method called again at a later time.
If a Runtime exception occurs during destroyApp then they are ignored and the MIDlet is put into the Destroyed state.
unconditional - If true when this method is called, the MIDlet must cleanup and release all resources. If false the MIDlet may throw MIDletStateChangeException to indicate it does not want to be destroyed at this time.
MIDletStateChangeException - is thrown if the MIDlet wishes to continue to execute (Not enter the Destroyed state). This exception is ignored if unconditional is equal to true.