But what is the user experience? Clearly, there are many factors, but
let us name a few:
interface design - visually pleasing interface
interaction design - ease of use, intuitiveness of the interface
resilience - the way our application behaves in special situations
User interface and interaction design are well-researched topics and
are beyond the scope of this topic. Interested readers can find a wealth of
information in [Ballard 2007].
9.1.1 Supporting Input Methods
There is one aspect of interaction design that is worth discussing
here - simply because it is specific to Java ME to an extent and rarely
covered in books discussing this topic.
Different Java ME devices allow for different input methods, such as
keypad and pointer. A good Java ME application should support both but
be resilient to absence of either. For example, an MIDP Sudoku game that
only allows keypad controls could be very frustrating for a touchscreen
While Form , List , and similar screen implementations should offer
this functionality out of the box, when using Canvas and its subclasses,
we are on our own. For more information on supporting input methods,
refer to Section 4.6.
9.1.2 Improving Responsiveness
A well-written application must produce a response to user input. If
tapping the screen or pushing a button does not produce visible results
quickly, the user doesn't know if their command has been received and
is executing or was not received at all. Additionally, if you have a long
operation running, you should keep the user informed by displaying the
progress so that the user can see that something is indeed happening and
can estimate when this operation will end.
There is another key point in making sure the application is respon-
sive - never block a system thread. Clearly, this requires some knowledge
about Java ME run-time implementations and a bit of proficiency with
threads but it can be distilled into a set of simple rules.
Let's first briefly discuss Java ME run-time system or 'infrastructure'
threads. First, system threads are not specifically defined in the Java
ME or MIDP specifications. However, they are an implementation detail