Tải bản đầy đủ

Pro Java ME Apps pot

Pro Java ME Apps

■ ■ ■
Ovidiu Iliescu

Pro Java ME Apps
Copyright © 2011 by Ovidiu Iliescu
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any
means, electronic or mechanical, including photocopying, recording, or by any information
storage or retrieval system, without the prior written permission of the copyright owner and the
ISBN-13 (pbk): 978-1-4302- 3327-5

ISBN-13 (electronic): 978-1-4302- 3328-2
Trademarked names, logos, and images may appear in this book. Rather than use a trademark
symbol with every occurrence of a trademarked name, logo, or image we use the names, logos,
and images only in an editorial fashion and to the benefit of the trademark owner, with no
intention of infringement of the trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if
they are not identified as such, is not to be taken as an expression of opinion as to whether or not
they are subject to proprietary rights.
President and Publisher: Paul Manning
Lead Editor: Steve Anglin
Development Editor: Douglas Pundick
Technical Reviewer: Carol Hamer
Editorial Board:
Steve Anglin, Mark Beckner, Ewan Buckingham, Gary Cornell, Jonathan
Gennick, Jonathan Hassell, Michelle Lowman, James Markham, Matthew Moodie,
Jeff Olson, Jeffrey Pepper, Frank Pohlmann, Douglas Pundick, Ben Renow-Clarke,
Dominic Shakeshaft, Matt Wade, Tom Welsh

Coordinating Editor: Adam Heath
Copy Editor: Mary Ann Fugate, Sharon Wilkey
Compositor: MacPS, LLC
Indexer: SPi Global
Artist: SPi Gobal
Cover Designer: Anna Ishchenko
Distributed to the book trade worldwide by Springer Science+Business Media, LLC., 233 Spring
Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail
orders-ny@springer-sbm.com, or visit www.springeronline.com.
For information on translations, please e-mail rights@apress.com, or visit www.apress.com.
Apress and friends of ED books may be purchased in bulk for academic, corporate, or
promotional use. eBook versions and licenses are also available for most titles. For more
information, reference our Special Bulk Sales–eBook Licensing web page at
The information in this book is distributed on an “as is” basis, without warranty. Although every
precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall
have any liability to any person or entity with respect to any loss or damage caused or alleged to
be caused directly or indirectly by the information contained in this work.
The source code for this book is available to readers at www.apress.com. You will need to answer
questions pertaining to this book in order to successfully download the code.
Mom, Dad, Grandpa – Thank you for everything. I love you.



Contents at a Glance
Contents v
About the Author xi
About the Technical Reviewer xii
Acknowledgments xiii
Introduction xiv

Chapter 1: Getting Started 1

Chapter 2: A Java ME Framework 25

Chapter 3: Defining Our Data 51

Chapter 4: The Networking Module 63

Chapter 5: The Persistence Module 93

Chapter 6: The UI Module 115

Chapter 7: The Localization Module 155

Chapter 8: Putting It All Together 169

Chapter 9: Device Fragmentation 193

Chapter 10: Optimizing Your Code 223

Chapter 11: Adding Fine Touches and User Interaction Improvements 251

Chapter 12: Java ME Application Testing 271

Chapter 13: Advanced Java ME Graphics 283

Chapter 14: The Proper Java ME Mindset 305

Chapter 15: Java ME and the Future 325

Chapter 16: Final Words 337
Index 341


Contents at a Glance iv
About the Author xi
About the Technical Reviewer xii
Acknowledgments xiii
Introduction xiv

Chapter 1: Getting Started 1
Java ME, Smartphones, and Feature Phones 1

Java ME’s Advantages 1

Java ME’s Disadvantages 2

The Bottom Line 3

Creating a Java ME Application 3

The Idea for the Application 4

Goals, Features, Revenue Sources, and Target Devices 4

Identifying the Target Devices 6

Identifying Java ME Technical Limitations 7

Regular Java ME Applications vs. Pro Java ME Applications 13

Writing Flexible Java ME Applications 15

Coding Defensively 16

Avoiding Wrong Assumptions 18

Learning How to Handle Complexity 18

Trade-Offs Are Your Friends—Use Them Wisely 20

Aim for a Loose and Decentralized Architecture 22

Never Do On-Device What You Can Do Off-Device 23

Summary 24

Chapter 2: A Java ME Framework 25
The Importance of Using a Framework 25

Why a Custom Framework for Each Application? 26

Defining the Framework’s Structure 27

Basic Object Types 28

Events 29

Event Listeners 31

Providers 31

Consumers 32

Managers 33

Models and Controllers 33

Views 34

Common Objects 35

The EventController Class 35

The EventControllerManager 37

Core Objects and Classes 39

The Application Class 39

The EventManagerThreads Class 40

The Bootstrap Class 44

A Simple Test Application 45

Summary 49

Chapter 3: Defining Our Data 51
Why Implement the Model Interface? 51

Making Data Types Immutable 52

Defining the Tweet Data Type 53

Defining the TwitterUser Data Type 54

Defining the TwitterServer Entity 55

Defining the UserCredentials Data Type 56

Defining the TweetFilter Data Type 58

Defining the Timeline Entity 58

Choosing Intelligent Representations for Your Data 59

Summary 61

Chapter 4: The Networking Module 63
Setting Up and Configuring the Library 63

Working with High-Level Objects 66

Using Your Own Data Types 66

Writing Our TwitterServer Implementation 67

Defining the General Structure 67

Initializing a ServerImplementation Instance 68

Providing Login Support 69

Posting Tweets 73

Retrieving Tweets 74

The getMyProfile() and getProfileFor() Methods 85

Best Practices for Java ME Networking 86

Do Not Reinvent the Wheel 86

Mobile Internet Is Special 87

Remember the Limitations of the Devices You’re Targeting 88

Support Network Throttling and Sleep Mode 88

Transmitting Your Data Efficiently 89

Keeping the Networking Code Light 90

Be Independent 91

Summary 91


Chapter 5: The Persistence Module 93
Understanding Java ME Persistence Options 93

Designing the Persistence Module 95

The Persistence Providers 96

RecordReaders and RecordWriters 97

Serializers and Deserializers 99

Persistence Helpers 100

Implementing the Core Architecture 100

Implementing Serializers and Deserializers 101

Implementing RecordReaders and RecordWriters 103

Implementing the PersistenceProvider 104

Testing the Code 106

Writing Persistence Helpers 107

Using the Module in a Real-Life Scenario 112

Taking the Module Further 113

Summary 113

Chapter 6: The UI Module 115
Why Create a Custom UI Module? 116

Understanding the Basics of Creating a UI Module 116

Widgets 117

Containers 118

Clipping Rectangles 120

Views 124

Themes 124

Handling User Interaction 126

Implementing Basic Widget Support 127

The BaseWidget Class 127

BaseContainerWidget and BaseContainerManager 130

Implementing Concrete Widgets 135

The VerticalContainer and HorizontalContainer Classes 135

The SimpleTextButton Class 139

The StringItem Class 141

InputStringItem 143

GameCanvasView 146

Testing the UI Module 147

Implementing UIs on Touch-Only Devices 149

Final Words About the UI Module 151

Summary 153

Chapter 7: The Localization Module 155
Understanding the Features of a Good Localization Module 155

Understanding Native Java ME Localization 156

Adding Custom Localization Support to a Java ME Application 157

Processing Localization Files 159

Loading Localization Data on the Device 161

Testing the Localization Module 164

Implementing Advanced Localization Features 165

Summary 168


Chapter 8: Putting It All Together 169
Jump-Starting the Application 169

Implementing the FlowController 170

Implementing the TweetsController 173

Implementing the WelcomeScreenController and the WelcomeForm 175

Implementing the MainForm and MainScreenController 179

Implementing the SettingsScreenController and the SettingsForm 184

Implementing the EVT Class 188

Improving the Application 189

Improving Error Handling 189

Increasing Functionality 191

Improving the UI Framework 191

Summary 192

Chapter 9: Device Fragmentation 193
Hardware Fragmentation 194

CPU Power 194

RAM 197

Screen 199

Other Hardware Considerations 201

Capabilities Fragmentation 202

API Inconsistencies 206

Localized API Inconsistencies 207

Global API Inconsistencies 210

Inconsistencies Open for Interpretation 212

Porting Frameworks 214

The Preprocessor 214

The Device Database 216

The Build Engine 216

The Abstraction API 217

Multi-platform Support 218

Utility Code and Tools 218

UI Library 219

Customer Support 219

Code License 220

Cross-Development and Porting Tools 220

Summary 221

Chapter 10: Optimizing Your Code 223
A Crash Course in Optimizing Code 224

Code Optimization Techniques 226

Fast Code Path Switching 226

Avoid Redundancy 227

Use Locality to Your Advantage 227

Optimize Your Math 228

Unroll Loops 231

Inline Code 231

Optimize Loop-Related Math 232

Keep Your Loops Conditional-Free 233

Eliminate Special Iterations from Your Loops 234

Use Loop Fission 235

Avoiding High-Level Language Features 235

Stick to the Basics 236

Avoid Unnecessary Object Creation 237

Optimize Memory Access 240

Algorithm Optimization Techniques 241

Comparing Algorithms 241

Improving Your Algorithms 243

Summary 250

Chapter 11: Adding Fine Touches and User Interaction Improvements 251
Adding Fine Touches to Your Application 251

Understanding Fine Touches 252

Adding Proper In-Application Help 253

Adding Contextual Information 255

Adding Proper Feedback 256

Adding Adaptive Text Capabilities 257

Adding History and Auto-Complete Support 259

Adding Intent Detection 260

Synchronizing Your Data Between Devices 261

Improving User Interaction 262

Eliminating User Confusion 263

Keeping the Interface Simple 264

Allowing Customers to Reach You Easily 266

Creating Nonmobile Versions of Your Application 267

Deploying Continuous Application Updates 267

Adding Skin Support 268

Advertising Related Products 269

Deciding Which Fine Touches and Improvements to Implement 270

Summary 270

Chapter 12: Java ME Application Testing 271
Gathering Debug Information 271

Performing Unit Testing 273

Solving Common Unit Test–Related Problems 274

Gathering Quality Debug Data 275

Running the Tests in a Desktop Environment 276

Performing Visual Debugging 276

Performing Battery Testing 277

Testing the Application in a Variety of Scenarios 279

Testing Performance Improvement and Optimization Techniques 280

Summary 281

Chapter 13: Advanced Java ME Graphics 283
Using Pre-rendered Graphics 284

Using Image Masking 287

Using Image Blending Techniques 289

Rotating Images 294

Resizing Images 300

Implementing Other Graphical Effects 301

Combining Multiple Effects Together 302

Summary 303

Chapter 14: The Proper Java ME Mindset 305
Java ME Is Only As Powerful As the Devices It Runs On 306

Best Practices for Optimizing Your Application 309

Sticking to Your Priorities 311

Thinking Outside the Box Is Important 314

Keeping Things Simple 315

Standardizing the User Experience 317

Planning for the Worst-Case Scenario 320

Determining Your Application’s Limits 320

Summary 323

Chapter 15: Java ME and the Future 325
Java ME Hardware Evolution 325

The Evolution of the Java ME API 327

The Evolution of the Java ME Mindset and Development Philosophy 328

Java ME’s Target Market 329

Java ME and Other Platforms 330

Java ME Application Types 331

Java ME Innovation 332

Java ME’s Death 333

Summary 335

Chapter 16: Final Words 337
What we have covered in the book 337

What to research next 338
In closing 339

Index 341



About the Author
Ovidiu Iliescu is a self-taught software developer; he started to write computer programs when
he was 9 and now has almost 15 years of experience under his belt. After writing desktop
applications and web-based applications, Ovidiu shifted his attention to the field of mobile
development. With a passion for all things computer related, his main interests besides mobile
software are computer graphics, algorithms and optimizations.
Ovidiu lives in Romania and has recently started his own software company, November
Solutions, to turn his ideas into products – and maybe conquer the world. Currently, he is also
working as a software developer for Enough Software and occasionally takes on interesting
projects as a freelancer.
You can get in touch with Ovidiu by visiting his website at www.ovidiuiliescu.com .


About the Technical
Carol Hamer received her Ph.D. in Number Theory from Rutgers, the State University of New
Jersey. Since then, she has worked as a software engineer for twelve years in the U.S., France, and
Switzerland, including three years working for In-Fusio Mobile Games.
Carol has written three books on mobile game programming: J2ME Games with MIDP2,
Creating Mobile Games, and Learn BlackBerry Games Development, all from Apress.



Douglas Pundick and Carol Hamer have provided valuable help and suggestions for the book’s
content. Adam Heath has kept an watchful eye on things and has extended my deadlines more
than once. Mary Ann Fugate and Sharon Wilkey have painstakingly copy edited the entire
manuscript. Without them, this book could not exist. Thank you!
My friends and loved ones have been very supportive of me during the entire writing process.
They have tolerated my busy schedule and my sometimes weary attitude. For this they have my
Special thanks go out to Robert Virkus and to everyone at Enough Software for their support
and for being an exceptionally awesome bunch of people.
Finally, a lot of people not mentioned here worked behind the scenes at Apress and at other
companies to bring this book to light. Thank you!


I find mobile phones to be amazing pieces of technology. They allow you to be almost anywhere
in the world and still be able to reach your friends, loved ones, colleagues or business partners
with a press of a button. If that wasn’t enough, they have grown so powerful that they are now
nothing short of pocket computers. Only a few decades ago the only place you could see a similar
devices was a Star Trek movie – now they’re reality.
Modern mobile phones run on a variety of software platforms, but by far the most popular
one in terms of reach and market share is Java ME. This once feature-limited platform has grown
and matured over the years along with the hardware supporting it; is now capable of delivering
truly amazing applications that have the potential to reach hundreds of millions (if not billions)
of people.
It is a bit disappointing, then, that the techniques developers use to write Java ME
applications have not kept up with the times. Many developers, especially less experienced ones,
tend to approach Java ME development in the same extremely conservative way that it was
approached almost a decade ago, when the platform was in its infancy. Or, even worse, they treat
Java ME like a desktop platform, with complete disregard to its nuances and to the fact that it is,
in fact, a mobile platform designed to run on mobile devices. As a consequence, many Java ME
applications fall short of their potential.
The book you are reading right now aims to correct this by presenting how modern Java ME
application development should be approached – complete with all the important tips and
techniques applicable to the platform today.
What is covered in this book
This book is somewhat different from other Java ME books, in that it is built around writing a
complete and fully-functional Java ME application from scratch, using modern day development
techniques. To this end, everything from writing an application framework to writing a UI
module (complete with widgets and touch support) will be discussed – no important application
component will be left uncovered.
Furthermore, you will get to see how all of these fit into the context of a real-world
application and how individual application components interact and work together. Decisions
made along the way will be explained, potential pitfalls will be highlighted and important advice
stemming from hands-on experience will be given - all in an effort to create a comprehensive
picture of what modern Java ME application development is all about.
Once the application is written, we will cover other aspects essential to Java ME
development. Code optimization, application testing, advanced graphics, improving the user’s
experience and the proper Java ME developer’s mindset will all be discussed.
Finally, we will take a look at Java ME’s future in order to get a better understanding of where
the platform is heading and a list of further research topics relevant to Java ME development will
be given.

What you will need for this book
First of all, you should be familiar with Java ME development on at least an intermediate level.
This is not a beginner’s book – in fact, it is assumed that you have worked on at least one
medium-sized Java ME application before.
Second, the target device for the source code presented in this book is the WTK emulator. For
best results, it is recommended that you have both versions 2.5.2 and 3.0 installed. The WTK
emulator has been chosen because of its ubiquitous nature and because it is pretty much the
“reference implementation” for Java ME. However, the code is designed to be as portable as
possible; running it on other emulators and on real devices should work just fine (but cannot be
It is also recommended that you run all the code presented and experiment with it. Java ME
is all about subtleties, many of which have to be seen in action in order to be grasped. For
obvious reasons, this is not possible with static code listings.
Let the fun begin
Java ME development, for me, is always a fun endeavor. While not always easy, it is almost never
dull either; there’s always some new challenge to overcome and something new to learn from
overcoming it.
With this in mind, I hope that you will enjoy reading this book and that the information
contained within will help make your life as a Java ME developer easier, more fun and more

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay