Question? Leave a message!


INTRODUCTION TO ANDROID CSCI 4448/5448: OBJECTORIENTED ANALYSIS DESIGN LECTURE 11 — 02/15/2011 © Kenneth M. Anderson, 2011 1 Tuesday, February 15, 2011Goals of the Lecture Present an introduction to the Android Framework Coverage of the framework will be INCOMPLETE We’ll provide additional coverage after the midterm © Kenneth M. Anderson, 2011 2 Tuesday, February 15, 2011Android open source software toolkit created, updated and maintained by Google and the Open Handset Alliance 2.X series and previous: mobile phones 3.X series: extended to also support tablets We’ll be covering 2.X in this lecture I’m hoping a team will tackle 3.X as part of their project or that a graduate student will select it as the topic of their OO presentation © Kenneth M. Anderson, 2011 3 Tuesday, February 15, 2011Tim Bray’s What Android Is The next few slides paraphrase a November 2010 blog post by Tim Bray; be sure to read the original What Android Is Tim Bray is a coinventor of XML and is currently employed by Google to work on Android © Kenneth M. Anderson, 2011 4 Tuesday, February 15, 2011Big Picture View (I) Android is a layered software framework At the bottom is the Linux kernel that has been augmented with extensions for Android the extensions deal with powersavings, essentially adapting the Linux kernel to run on mobile devices Next are a set of standard libraries Apache HTTP, OpenGL ES, Open SSL, SAX, WebKit, SQLite, libc, FreeType, etc. © Kenneth M. Anderson, 2011 5 Tuesday, February 15, 2011Big Picture View (II) Android is a layered software framework The third layer is the Android Framework These classes and services uniquely define Android Examples include Activity Manager, Search manager, Notification Manager, Media Player, Widow Manager, etc. These services are used by developers to create Android applications that can be run in the emulator or on a device © Kenneth M. Anderson, 2011 6 Tuesday, February 15, 2011Big Picture View (III) Android is a layered software framework The fourth layer are actual Android apps and services These applications are executed by the Dalvik virtual machine, essentially a Java virtual machine but with different bytecodes Note: Android also supports native applications written in C/C++ (think games); I will not be covering that aspect of Android programming © Kenneth M. Anderson, 2011 7 Tuesday, February 15, 2011Android Applications Android applications get distributed in a .apk file APK stands for “Android Package” It is simply a zip file that has a particular file structure (similar to JAR files that take snapshots of the file system) An APK contains The Android Manifest file (an XML file with lots of metadata) A Resource bundle containing sounds, graphics, etc. The Dalvik classes that make up your application © Kenneth M. Anderson, 2011 8 Tuesday, February 15, 2011Android Benefits (I) Proponents of Android point to the following benefits An open free development platform Handset makers can use it without royalty and customize to their hearts content Componentbased architecture Lots of default components (such as the onscreen keyboard) can be replaced straightforwardly © Kenneth M. Anderson, 2011 9 Tuesday, February 15, 2011Android Benefits (II) Proponents of Android point to the following benefits Lots of services: location, sql, maps, web, etc. Well managed applications; isolated from each other to protect data and provide security; operating system can quit programs as needed to ensure good performance on mobile devices Portability: To support a new device, a company has to port the virtual machine; Android apps (Dalvik) then execute on the new device with little to no modification © Kenneth M. Anderson, 2011 10 Tuesday, February 15, 2011Android Installation See Installing Android on the What’s New Page Major steps Install Java (if needed); JDK 5.0 or higher Download and install Eclipse Download the Android SDK Download a version of the Android Platform Install and Configure the Eclipse Android plugin © Kenneth M. Anderson, 2011 11 Tuesday, February 15, 2011Before developing… (I) Create an Android Virtual Device The emulator for Android is called a “virtual device” When you first start developing for Android, you will need to create one; then Eclipse will build .apk files that can be stored and executed on that device (essentially they run on an imaginary phone that has been configured to have a certain amount of memory and UI and that targets a particular version of the Android API © Kenneth M. Anderson, 2011 12 Tuesday, February 15, 2011Before developing… (II) To create a vir tual device Launch Eclipse Select Window Android SDK and AVD Manager Select “Virtual Devices” in the resulting window Click “New…” Configure the resulting screen (defaults are fairly obvious) and click “Create AVD” © Kenneth M. Anderson, 2011 13 Tuesday, February 15, 2011Hello World (I) As with all advanced frameworks, the standard application template is configured to ensure that you have a working application from the start In Eclipse Click the new Android project icon Fill out the resulting dialog with the values on the next slide Click “Finish” © Kenneth M. Anderson, 2011 14 Tuesday, February 15, 2011Hello World (II) Project Name: Hello World Build Target: Android 2.3 (or whatever you downloaded) Application Name: Hello From Android Package Name: org.example.hello Activity: Hello Min SDK: 9 (or whatever you downloaded; 10 is the current latest SDK) © Kenneth M. Anderson, 2011 15 Tuesday, February 15, 2011Hello World (III) Zoom in on dialog box on the left to confirm what you should be seeing on your machine © Kenneth M. Anderson, 2011 16 Tuesday, February 15, 2011Meet the Android Project On disk, this virtual representation in Eclipse translates to 19 files stored in 19 directories Only 2 Java source code files however Demo © Kenneth M. Anderson, 2011 17 Tuesday, February 15, 2011Run the Program As mentioned previously, this application is ready to run So, right click on the project icon And select Run As Android Application The first time the emulator launches, it takes a long time; It may then show a “lock screen” that needs to be unlocked; It will then show our marvelous application © Kenneth M. Anderson, 2011 18 Tuesday, February 15, 2011Hello From Android We can see our application name across the top. But where did the string “Hello World, Hello” come from © Kenneth M. Anderson, 2011 19 Tuesday, February 15, 2011Not in Hello, our initial Activity Lots of interesting info here We see the package that we specified in line 1 We see that activity’s come from the package But no sign of the “” string “Hello World, Hello” We see hints of a life cycle model: “onCreate” A clue: R.layout.main © Kenneth M. Anderson, 2011 20 Tuesday, February 15, 2011Not in Egads, run screaming Besides, it says “Auto generated file. Do not Modify.” Autogenerated from what © Kenneth M. Anderson, 2011 21 Tuesday, February 15, 2011Double Click layout.xml in res/layout Bingo But what are we seeing Click the tab main.xml for a view of the actual xml file © Kenneth M. Anderson, 2011 22 Tuesday, February 15, 2011Fun with XML Again, lots of fun information; Our user interface is defined by a vertical “LinearLayout”, i.e. in a straight line, that contains a single widget, a TextView And, the value of the TextView is “string/hello” Hmm… that’s not the string we saw in the GUI © Kenneth M. Anderson, 2011 23 Tuesday, February 15, 2011The Likely Suspect: res/values/strings.xml Bingo The slightly ungrammatical phrase of “Hello World, Hello” was hiding in the strings.xml file that is a part of our app’s standard resources © Kenneth M. Anderson, 2011 24 Tuesday, February 15, 2011What have we learned Android Apps make use of classes and resources At least one of the classes comes from “” and is called Activity When an activity is created, the operating system calls its onCreate() method One of the things it can do is set the current layout Layouts are specified in XML files and make use of strings defined in other XML files There are graphical editors for these XML files © Kenneth M. Anderson, 2011 25 Tuesday, February 15, 2011Let’s learn more… The key parts of the Android Framework are The activity manager: starts, stops, pauses and resumes applications The resource manager: allows apps to access the resources bundled with them content providers: objects that encapsulate data that is shared between applications Location Manager and Notification Manager (events) © Kenneth M. Anderson, 2011 26 Tuesday, February 15, 2011Application Stack When a user launches an Android application A linux process is created, containing an activity That activity’s layout takes over the entire screen except for the status bar The user may then switch to a different screen in the application (i.e. a different activity) or to a new application all together Screens are “stacked” and the user can navigate back to the previous screen by pressing the “back” button © Kenneth M. Anderson, 2011 27 Tuesday, February 15, 2011Application Life Cycle (I) In Android, an application is a set of activities with a Linux process to contain them However, an application DOES NOT EQUAL a process Due to low memory conditions, an activity might be suspended at any time and its process discarded The activity manager remembers the state of the activity however and can reactivate it at any time Thus, an activity may span multiple processes over the life time of an application © Kenneth M. Anderson, 2011 28 Tuesday, February 15, 2011Activity Life Not just started onCreate() cycle Running being redisplayed from a stopped state about to be onStop() and onStart() onRestart() displayed onDestroy() are optional can start interacting onResume() and may with user never be sent to called foreground Running sent to background Thus, if your onPause() app needs to Process no longer visible save data Killed persistently, onStop() the save needs to happen in onDestroy() onPause() © Kenneth M. Anderson, 2011 29 Tuesday, February 15, 2011Let’s see this in action Create new application Project Name: Life Cycle Build Target: Android 2.3 (or whatever you downloaded) Application Name: Activity Life Cycle Package Name: org.example.lifecycle Activity: LifeCycle Min SDK: 9 © Kenneth M. Anderson, 2011 30 Tuesday, February 15, 2011Modify Add a method for each of the life cycle events Each method should call its counterpart in the superclass and then call System.out with a message. Run the app and switch to the Debug perspective; watch the events appear in the Log © Kenneth M. Anderson, 2011 31 Tuesday, February 15, 2011Intents The other primary concept for an application is an Intent Intents are used to describe a specific action An activity will create an Intent and then invoke it Intents can be used to pass information between activities, as we will see Intents can also be used to launch other applications, such as the builtin web browser or the builtin camera We’ll see simple uses of Intents next and explore them more in lectures after the midterm © Kenneth M. Anderson, 2011 32 Tuesday, February 15, 2011Switching Between Activities We will now design a simple application that has three activities (and thus three screens). A start screen will contain two buttons that let you jump to the other two screens. Screen one and screen two will each contain a button that takes you to the other screen. We won’t provide a way to go back to the start screen Since we have multiple activities, we’ll use intents to switch between them © Kenneth M. Anderson, 2011 33 Tuesday, February 15, 2011Step 1 Create the Application Project Name: Screen Switcher Build Target: Android 2.3 Application Name: Screen Switcher Package Name: org.example.screenswitcher Activity: StartScreen Min SDK: 9 © Kenneth M. Anderson, 2011 34 Tuesday, February 15, 2011Step 2 Need to modify the default layout Add label for application name and screen name Add buttons to go to screen one and screen two Resize text, add margins, and center elements on screen New concepts Each widget has an id using the following syntax +id/identifier (has Android define a global id automatically) © Kenneth M. Anderson, 2011 35 Tuesday, February 15, 2011Step 3 Define what happens when the two buttons are clicked New concepts Create an Intent Intent i = new Intent(this, ScreenOne.class); Where ScreenOne is a new Activity findViewById(resourceid): looks up widgets OnClickListener: implement interface © Kenneth M. Anderson, 2011 36 Tuesday, February 15, 2011Step 4 Create the other two Activities Use File New Class in Eclipse Add new classes to the src directory with the package org.example.screenswitcher and the superclass Do not generate method stubs. Name one activity ScreenOne and the other ScreenTwo © Kenneth M. Anderson, 2011 37 Tuesday, February 15, 2011Step 5 Implement onCreate() for both of the new activities and create layout files for both Both layout files will go in res/layout Use File New Android XML File Define layout for both screens… both will have a title and a button. They will each have a different background color Colors will be defined in res/values/colors.xml © Kenneth M. Anderson, 2011 38 Tuesday, February 15, 2011Step 6 Update the Android Manifest to “know” about the other two activities You can now run the application and switch among the various screens Note: the ScreenTwo activity has been augmented to assign ids to each instance created and it prints out life cycle events with the id so we can see how many instances are created © Kenneth M. Anderson, 2011 39 Tuesday, February 15, 2011Discussion As we can see from the output of ScreenTwo’s Log messages, each time we invoke startActivity(new Intent(this, ScreenTwo.class)); we create a completely new instance of ScreenTwo Even though “screen two” as a logical concept suggests that there should only be one “screen two activity”, a separate activity gets created each time we visit it This has implications for application design We don’t want to start “big” activities multiple times © Kenneth M. Anderson, 2011 40 Tuesday, February 15, 2011Wrapping Up (I) We’ve had a brief introduction to the Android framework Big picture: Apps running in Dalvik on top of Linux Application = Process Application equals set of activities (screens) Applications use Intents to start new activities be it activities within the same application or to invoke a system activity (e.g. view web page) © Kenneth M. Anderson, 2011 41 Tuesday, February 15, 2011Wrapping Up (II) After the midterm, we’ll return to the Android framework More comprehensive example We’ll see how to pass data between activities using Intents Getting user input via forms and dialogs Accessing the file system and the network And more… © Kenneth M. Anderson, 2011 42 Tuesday, February 15, 2011Coming Up Next Lecture 12: Introduction to ObjectiveC Homework 4 Assigned on Friday Lecture 13: Introduction to iOS Homework 4 Due on Wednesday Lecture 14: Review for Midterm Lecture 15: Midterm Lecture 16: Review of Midterm © Kenneth M. Anderson, 2011 43 Tuesday, February 15, 2011
Website URL