Table of contents for Programming mobile devices : an introduction for practitioners / Tommi Mikkonen.

Bibliographic record and links to related information available from the Library of Congress catalog.

Note: Contents data are machine generated based on pre-publication provided by the publisher. Contents may have variations from the printed book or be incomplete or contain other coding.


Counter
Contents
Preface vii
1 Introduction 1
1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Leaking Abstractions . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 Allocation Responsibility . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Commonly Used Hardware and Software . . . . . . . . . . . . . . . . . . . 4
1.2.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 Concepts of Low-Level Software Infrastructure . . . . . . . . . . . . 11
1.2.3 Run-Time Infrastructure . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.4 Software Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3 Development Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.4 Towards More Computer-LikeMobile Devices . . . . . . . . . . . . . . . . 21
1.4.1 Workstation Operating Systems . . . . . . . . . . . . . . . . . . . . 22
1.4.2 Mobile or Mobility-enabled Applications? . . . . . . . . . . . . . . . 22
1.4.3 Device Management . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.4.4 Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.5 Chapter Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2 Programmer-InitiatedMemory Management 27
2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2 Strategies for Allocating Variables to Memory . . . . . . . . . . . . . . . . . 27
2.2.1 Static Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2.2 Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2.3 Heap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3 Design Patterns for Limited Memory . . . . . . . . . . . . . . . . . . . . . . 31
2.3.1 Linear Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.3.2 Basic Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3.3 Data Packing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.4 Memory Management in Mobile Java . . . . . . . . . . . . . . . . . . . . . 35
2.4.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.4.2 Rules of Thumb for Mobile Java . . . . . . . . . . . . . . . . . . . . 36
2.5 Symbian OS Memory Management . . . . . . . . . . . . . . . . . . . . . . 40
2.5.1 Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.5.2 Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.5.3 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.5.4 Combining Exceptions and Allocation . . . . . . . . . . . . . . . . . 45
2.5.5 Cleanup Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.5.6 Two-phase Construction . . . . . . . . . . . . . . . . . . . . . . . . 48
2.5.7 Factory Methods for Two-Phase Construction . . . . . . . . . . . . . 49
2.5.8 Using Symbian Conventions . . . . . . . . . . . . . . . . . . . . . . 50
2.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3 Concept of Applications 57
3.1 What Constitutes an Application? . . . . . . . . . . . . . . . . . . . . . . . 57
3.2 Workflow for Application Development . . . . . . . . . . . . . . . . . . . . 58
3.2.1 Scoping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.2.2 Importance of Performance . . . . . . . . . . . . . . . . . . . . . . . 60
3.2.3 User Interface Design . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.2.4 Data Model and Memory Concerns . . . . . . . . . . . . . . . . . . 62
3.2.5 Communications and I/O . . . . . . . . . . . . . . . . . . . . . . . . 62
3.2.6 Example: Calendar Application . . . . . . . . . . . . . . . . . . . . 63
3.2.7 Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.3 Managing Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.3.1 Management Operations . . . . . . . . . . . . . . . . . . . . . . . . 65
3.3.2 Packaging Applications . . . . . . . . . . . . . . . . . . . . . . . . 65
3.4 Implementation Techniques for Applications . . . . . . . . . . . . . . . . . . 66
3.4.1 Event-Based Programming . . . . . . . . . . . . . . . . . . . . . . . 66
3.4.2 Model-View-Controller as the Application Architecture . . . . . . . . 68
3.4.3 Auxiliary Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.5 Application Models in Mobile Java . . . . . . . . . . . . . . . . . . . . . . . 72
3.5.1 Virtual Machine Implementations for Mobile Java . . . . . . . . . . 72
3.5.2 Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
3.5.3 Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.5.4 Sample MIDP Java Application . . . . . . . . . . . . . . . . . . . . 79
3.6 Symbian OS Application Infrastructure . . . . . . . . . . . . . . . . . . . . 83
3.6.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
3.6.2 Definition files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
3.6.3 DLL entry point . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.6.4 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.6.5 Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.6.6 User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.6.7 View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
3.6.8 Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
3.6.9 Generating Installation Package . . . . . . . . . . . . . . . . . . . . 102
3.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
4 Modularity based on Dynamically Linked Libraries 107
4.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.1.2 Release Definition Using DLLs . . . . . . . . . . . . . . . . . . . . 108
4.1.3 Required Implementation Facilities . . . . . . . . . . . . . . . . . . 109
4.1.4 Static versus Dynamic Dynamically Linked Libraries . . . . . . . . . 110
4.1.5 Challenges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
4.2 Implementation Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
4.3 Implementing Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
4.3.1 Plugin Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
4.3.2 Implementation-Level Concerns . . . . . . . . . . . . . . . . . . . . 114
4.4 Managing Memory Consumption Related to DLLs . . . . . . . . . . . . . . 114
4.4.1 Memory Limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
4.4.2 Interface Design Principles . . . . . . . . . . . . . . . . . . . . . . . 115
4.4.3 Merging Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
4.5 Rules of Thumb for DLL Use . . . . . . . . . . . . . . . . . . . . . . . . . . 117
4.6 Mobile Java and Dynamic Libraries . . . . . . . . . . . . . . . . . . . . . . 118
4.7 Symbian OS Dynamic Libraries . . . . . . . . . . . . . . . . . . . . . . . . 121
4.7.1 Standard DLL Structure . . . . . . . . . . . . . . . . . . . . . . . . 121
4.7.2 Managing Binary Compatibility . . . . . . . . . . . . . . . . . . . . 123
4.7.3 ECOM ComponentModel . . . . . . . . . . . . . . . . . . . . . . . 125
4.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
4.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
5 Concurrent Programming and Mobile Devices 129
5.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
5.2 Infrastructure for Concurrent Programming . . . . . . . . . . . . . . . . . . 129
5.2.1 Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
5.2.2 Inter-Thread Communication . . . . . . . . . . . . . . . . . . . . . . 130
5.2.3 Common Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
5.3 Faking Concurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
5.4 MIDP Java and Concurrency . . . . . . . . . . . . . . . . . . . . . . . . . . 133
5.4.1 Threading in Virtual Machine . . . . . . . . . . . . . . . . . . . . . 133
5.4.2 Using Threads in Mobile Java . . . . . . . . . . . . . . . . . . . . . 134
5.4.3 Problems with Java Threading . . . . . . . . . . . . . . . . . . . . . 136
5.5 Symbian OS and Concurrency . . . . . . . . . . . . . . . . . . . . . . . . . 137
5.5.1 Available Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . 137
5.5.2 Composing Active Objects . . . . . . . . . . . . . . . . . . . . . . . 140
5.5.3 Sample Active Object . . . . . . . . . . . . . . . . . . . . . . . . . 141
5.5.4 Active Objects and Applications . . . . . . . . . . . . . . . . . . . . 145
5.5.5 Problems with Active Objects . . . . . . . . . . . . . . . . . . . . . 146
5.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
5.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
6 Handling Local Resources 149
6.1 Resource-Related Concerns in Mobile Devices . . . . . . . . . . . . . . . . 149
6.1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
6.1.2 Grouping Resource Managers . . . . . . . . . . . . . . . . . . . . . 151
6.1.3 Separating Resource Managers . . . . . . . . . . . . . . . . . . . . . 152
6.2 Common Concerns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
6.2.1 Extension and Adaptation . . . . . . . . . . . . . . . . . . . . . . . 154
6.2.2 Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
6.2.3 Energy Consumption . . . . . . . . . . . . . . . . . . . . . . . . . . 157
6.2.4 Internal Resource Management . . . . . . . . . . . . . . . . . . . . 158
6.3 MIDP Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
6.3.1 Basic Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
6.3.2 Compatibility between Different Devices . . . . . . . . . . . . . . . 161
6.4 Symbian OS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
6.4.1 Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
6.4.2 Implementing Servers . . . . . . . . . . . . . . . . . . . . . . . . . 165
6.4.3 Adapting Servers to Hardware . . . . . . . . . . . . . . . . . . . . . 167
6.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
7 Designing Networking Functions for Mobile Devices 173
7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
7.1.1 Basic Connectivity . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
7.1.2 Infrastructure Assisted or Ad-hoc Networking? . . . . . . . . . . . . 175
7.1.3 Stateful and Stateless Systems . . . . . . . . . . . . . . . . . . . . . 178
7.1.4 Immediate or Convenient Time Operations? . . . . . . . . . . . . . . 179
7.1.5 Telephony or Data Communications? . . . . . . . . . . . . . . . . . 180
7.2 Concerns in the Design of Network Enabled Applications . . . . . . . . . . . 181
7.3 Sample Techniques for Networking Applications . . . . . . . . . . . . . . . 181
7.3.1 Multimedia messages . . . . . . . . . . . . . . . . . . . . . . . . . . 181
7.3.2 Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
7.3.3 Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
7.4 Sample Implementations in Mobile Platforms . . . . . . . . . . . . . . . . . 185
7.4.1 MIDP Java and Web Services . . . . . . . . . . . . . . . . . . . . . 186
7.4.2 Symbian and Bluetooth Facilities . . . . . . . . . . . . . . . . . . . 188
7.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
7.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
8 Security Features 195
8.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
8.1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
8.1.2 Scoping Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
8.2 Secure Coding and Design . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
8.2.1 Mindset for Secure Design . . . . . . . . . . . . . . . . . . . . . . . 196
8.2.2 Sample Security-Related Design Patterns . . . . . . . . . . . . . . . 197
8.3 Infrastructure for Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
8.3.1 Run-Time Security Features . . . . . . . . . . . . . . . . . . . . . . 200
8.3.2 Install-Time Security Features . . . . . . . . . . . . . . . . . . . . . 200
8.4 Security Features in MIDP Java . . . . . . . . . . . . . . . . . . . . . . . . 200
8.4.1 Low-level Security . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
8.4.2 Application Level Security . . . . . . . . . . . . . . . . . . . . . . . 201
8.4.3 End-to-End Security . . . . . . . . . . . . . . . . . . . . . . . . . . 202
8.5 Symbian OS Security Features . . . . . . . . . . . . . . . . . . . . . . . . . 203
8.5.1 Overview of Capability-Based Security . . . . . . . . . . . . . . . . 203
8.5.2 Run-Time Effect of Capabilities . . . . . . . . . . . . . . . . . . . . 204
8.5.3 Data Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
8.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
8.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Bibliography 209

Library of Congress Subject Headings for this publication:

Mobile computing.
Wireless communication systems.