In the recent years, smartphones became part of everyday life for most people. Their computational power and their sensing capabilities unlocked a new universe of possibilities for mobile developers. However, mobile development is still a young field and various pitfalls need to be avoided. In this chapter, the authors present several aspects of mobile development that need to be considered carefully. More specifically, this chapter covers topics like energy efficient sensing, smart computing, trade-off between accuracy and simplicity, data storage and cloud integration. These aspects are illustrated based on the authors' experience building a lifelogging application for the past two years.
TopIntroduction
With the advent of smartphones and the evolution of mobile OSs offering ever more capabilities, the development of mobile applications became a leading activity in information technology. From mobile games to productivity-oriented applications, the market of mobile applications is blossoming. However, as a relatively novel field, it took inspiration from its computer counterpart, which led to many challenges, as the computer specifications do not match those of a mobile device. In recent years for example, due to the increase of mobile web browsing, the web industry has had to depart from the classic interfaces based on wide screens and mouse interactions, in order to support vertical screens and touch-screen capabilities as well; This leads to the creation of new frameworks and new methodology.
This chapter will present three aspects of the development of mobile applications; These aspects need to be readapted in order to comply with the limitations of mobile platforms and to be compatible with fast-paced development cycles. These aspects are specifically:
- 1.
Smart and incremental computation to improve battery consumption,
- 2.
The trade-offs that can be made between accuracy and simplicity of the data-processing algorithms, and
- 3.
Data storage and privacy aspects, i.e., which information should effectively leave the user’s smartphone.
The mobile environment is very restricted: Although its memory is reaching that of low-end laptops, its processing power is still relatively low, and although the battery duration of a smartphone is longer than the ones of laptops, the latter are not meant to last a full day on battery. In order to improve the overall usability of the phone, mobile applications should be extremely battery efficient and smart in their computation. Furthermore, the pace of the evolution of the SDKs and mobile frameworks forces mobile development to become faster and incremental. Algorithm complexity is often the synonym of computational cost -- for this reason, it is important for application components to be simple. Finally, privacy is a rising concern. In order not to disclose the overwhelming amount of user related data that can be acquired by mobile devices, it is necessary to select which piece of data should effectively leave the user’s device.
These optimizations are illustrated based on the life-logging Android application, MEmoIt, that the authors have developed in the last two years. It shows the challenges met, and explains the choices made in this project.
TopBackground
Local Processing and Resource-Hungry Operations
The computing capabilities of smartphones remains very limited compared to single servers or cloud infrastructures. Furthermore, digital economy analysts agree that data is the new oil. These two facts combined, led most companies to rely on the cloud to store data and/or perform heavy computation. However, recently, privacy issues have been brought to light (Chen & Zhao, 2012; Xiao & Xiao, 2013). Hence, to address users concerns about what usage is made of their data, some companies departed from this model to return to on-device computation. For instance, the health-related data collected by Apple Healthkit (Apple, n.d.) are stored and encrypted locally, and a strict access control regulates the applications that want to read it. Another advantage of local processing is the ability to provide a service that degrades gracefully when an Internet connection cannot be established. Google translate (n.d.) and Google navigation systems (Google Play, n.d.) are examples of such services, which can now be queried offline.