ServerSocketConnection is still optional inMSA 1.1 but is supported
on all Symbian smartphones.
The MIDP 2.0 specification does not define which protocols and
services must be supported by the Push Registry, yet the support of Java
ME on Symbian OS protocols exceeds the MSA 1.1 mandated list; for
example, the Push Registry supports TCP server sockets.
For a developer, a powerful common Java ME implementation for
many devices improves the predictability of advanced features.
We do not list all of the optional features for all Symbian smartphones
because such a list would be long, quite tedious and of questionable
value. We are not attempting to provide you with answers for every
possible question; we're trying to provide you with the right questions
and the right techniques or advice to answer the questions.
3.5.1 Multitasking Between Applications
One of the powerful features of Symbian OS is that there can be more
than one application running at the same time and the user (or Symbian
OS itself) may switch between applications and move them between the
foreground and the background. For example, the user can start a Java
application, switch to the applications menu and start another native
application and possibly a third Java or native application as well. Since
Symbian OS is a multitasking operating system, all three applications
can continue running concurrently without being terminated. The AMS
can also move an application to the background, for example, when the
device receives a phone call. This is a major difference from low-end
platforms, in which switching from the current application to another
terminates the former application.
Your Java application needs to be designed with moving between the
background and foreground in mind. It must be 'a good citizen'; while it
is in the background, it must allow the foreground application to acquire
the resources it needs. To ensure this, adhere to the MIDlet lifecycle
When your application is sent to the background, the MIDlet.
pauseApp() method is called and the MIDlet should release tem-
porary resources and become passive (e.g., it should close open
connections and pause rendering application threads).
When your application is brought back to the foreground, the
MIDlet.startApp() method is called and the MIDlet can acquire
any resources it needs and resume (e.g., it should resume application
threads that handle the UI rendering).
The following snippet of code illustrates an implementation of MID-
let.startApp() and MIDlet.pauseApp() :