Transcript 3.JAE.2015
Mobile Computing
Java, Android, and Eclipse
1
Copyright 2015 by Janson Industries
Objectives
▀
Explain
Application
Basic
organization in Eclipse
Java concepts
How
to code and run an Android app
in the emulator
Controlling
The
the emulator
Android app life cycle
2
Copyright 2015 by Janson Industries
Eclipse
▀
Has a variety of perspectives
Java,
▀
Debug, DDMS
Each perspective consists of a
unique set of functions and views
of the application resources
Java
shows source code and
allows the programmer to edit it
Debug
shows the stack trace (logic
flow) of a running app
DDMS
Copyright 2015 by Janson Industries
allows access to the
device/emulator’s file system
3
Perspective indicated in upper right hand corner
Java Perspective window initially consists of 6 panes – only need 4.
Can close Task List and Connect Mylyn
Panes contain views
Views indicated by tabs at top of pane, switch view by clicking tab
Resize panes by clicking and dragging borders
4
Double
view tab to expand view and fill perspective window
Copyright
2015 byclick
Janson Industries
Can have multiple perspectives open but only one is active
5
Copyright 2015 by Janson Industries
Open a new perspective by clicking Window, Open Perspective, then
choose a perspective
Switch between perspectives by clicking perspective button
6
Copyright 2015 by Janson Industries
Eclipse
▀
All of an application’s
resources are stored in a
project
Source
code
Images
XML
▀
The resources can be further
organized into folders and
packages
7
Copyright 2015 by Janson Industries
Eclipse
Project
Package
▀
Folder
Package
Folder
File
Packages and folders hold the
majority of an application’s
resources
Source
code
Images
XML
▀
Copyright 2015 by Janson Industries
Java source code must go into
a package
8
Android Java
▀
▀
▀
An Android application’s
programs are called activities
Files with an extension of .java
hold an activity’s source code
To create an activity you have to
have a project and a package to
put it in
9
Copyright 2015 by Janson Industries
Creating an Application
▀
Click File, New and then Project
▀
Select Android Project
▀
Specify:
Project,
package, activity and
application names
A
build target
10
Copyright 2015 by Janson Industries
Click File, New, and Project then expand Android, select Android
Application Project and click Next
11
Copyright 2015 by Janson Industries
Give names to the Application (Howdy), Project (MyFirstProject) ,
Package (my.first.pkg), specify 2.1, click Next
12
Copyright 2015 by Janson Industries
Creating an Application
Click Next
13
Copyright 2015 by Janson Industries
Creating an Application
Can create
a unique
icon
We’ll accept
default and
click Next
14
Copyright 2015 by Janson Industries
Creating an Application
Will create
a Hello
World
activity for
us
Click Next
15
Copyright 2015 by Janson Industries
Creating an Application
Change activity
name to
HowdyActivity
Click Finish
16
Copyright 2015 by Janson Industries
Creating an Application
Eclipse will create the
Project
Packages
and folders
Files
It even creates a working
application
In
a file called HowdyActivity.java
File stored in a package called
my.first.pkg in source folder src
17
Copyright 2015 by Janson Industries
To Run an Application
In Package Explorer, expand
MyFirstProject, src, & my.first.pkg
Right click HowdyActivity and
select Run As then Run
Configurations
Select Android Application and
click the New button
18
Copyright 2015 by Janson Industries
19
Copyright 2015 by Janson Industries
Give the configuration a name and specify the Project
Click Apply and Run
20
Copyright 2015 by Janson Industries
To Run an Application
First time will take a while
Emulator must configure itself
and will launch
The emulator is displayed
You
have to click and drag the
lock icon to see the results of the
activity
21
Copyright 2015 by Janson Industries
Click and drag the lock icon to the right
22
Copyright 2015 by Janson Industries
If app doesn’t start, rerun in Eclipse
23
Copyright 2015 by Janson Industries
Console should show that app was installed just not run
24
Copyright 2015 by Janson Industries
Voila!
25
Copyright 2015 by Janson Industries
To Run an Application
Once emulator is running, results
will be shown must faster
To close emulator:
Right
click Android button in the
System Tray
Select
Or
Copyright 2015 by Janson Industries
Close Window
click the Close Window button
Can control the size of the
emulator
26
Control Emulator Size
Run emulator before running an
activity. Click:
Window
AVD
(in the command bar)
Manager
Select
the AVD
Click
Start
Click
Scale display to real size
Specify
Click
screen size
Launch
27
Copyright 2015 by Janson Industries
1
3
2
4
5
28
Copyright 2015 by Janson Industries
New size fits on the screen better
to go
Copyright 2015 by Need
Janson Industries
back and close AVD Manager window
30
How Does It Work
The generated application is
pretty complicated and requires a
lot of Java knowledge
Let’s first learn some Java (then
some XML) and then generate our
own application
Later
we will cover the workings of
the generated application
31
Copyright 2015 by Janson Industries
Java
Java programs are called classes
Classes are stored in files that
have an extension of .java
Classes are comprised of a
header and a body
32
Copyright 2015 by Janson Industries
Java Class
Class header defines:
The
source code as a class (e.g.
“class” keyword is used)
Access
The
allowed (e.g. “public”)
name of class
Must
begin with an upper case letter
Is case sensitive
Cannot contain spaces
Must match .java file name prefix
• I.e. a class named Customer must be in a file
named Customer.java
33
Copyright 2015 by Janson Industries
Java Class
The class body is enclosed in
braces {} and comprised of
class/global variables and methods
Simple class example:
public class ClassName {
global variable definition
global variable definition
method{}
method{}
}
Copyright 2015 by Janson Industries
34
Java Method
Comprised of a header and body
Header definition comprised of:
Modifiers
(e.g. “private”, “public”,
“static”)
Return value (e.g. “void”, “String”)
Method name
Begins
with a lower case letter (e.g.
getMailingLabel, main)
Parameter(s)/received
value(s) in
parenthesis (e.g. (String name), (int
age), () means no params)
35
Copyright 2015 by Janson Industries
Java Method Header
Method header/definition examples:
public
void setName(String custName)
public
String getMailingLabel()
public
static void main(String[ ] args)
A
static method can be run all by itself’
• It is self sufficient/stand alone
If multiple values passed/received
simply separate by commas
(String
itemName, int itemPrice)
36
Copyright 2015 by Janson Industries
Java Method Header
Private methods:
Can
only be accessed/run by other
methods within the class
Public methods:
Can
be accessed by objects
external to the class
Are
considered the class “interface”
This
is how other classes/objects can
interface with this class
37
Copyright 2015 by Janson Industries
Java Method Body
Enclosed in braces { }
Comprised of:
Local
variable definitions
Executable
Variable definition comprised of:
The
variable type
The
variable name
A
Copyright 2015 by Janson Industries
statements
semicolon (;)
38
Java Method Body
Variable definition examples
int age;
String customerName;
double salary;
String street, city, state, zip;
In addition, variable definitions
can
Specify
access modifiers
Initialize
Copyright 2015 by Janson Industries
the variable
39
Java Method Body
Variable definition examples
private int age = 22;
String customerName = new String(
“Joe”) ;
double salary = 1123.54;
public String street, city, state, zip;
Executable statements also must
end in semicolons
System.out.println(“Howdy”);
40
Copyright 2015 by Janson Industries
Java Method Body Example
public void onCreate(Bundle aBundle) {
super.onCreate(aBundle); statements
variable
definition
String greeting = new String(“******Hello*******”);
System.out.println(“A print of static text");
System.out.println(“The value of greeting is: ” + greeting);
}
41
Copyright 2015 by Janson Industries
Classes
If a class is stored in a package,
the class must have a package
statement at the very beginning of
the source code
So for example, the HowdyActivity
class has the following:
package my.first.pkg;
42
Copyright 2015 by Janson Industries
Activity Classes
Activity classes are executable
Some special requirements
The
class must be defined as an
acitivty
When first run, the activity’s
onCreate method will be executed
onCreate must
accept a Bundle object
call it’s superclass’ onCreate
method and pass the bundle
43
Copyright 2015 by Janson Industries
Superclass
All classes are related in a
hierarchy
This parent/child relationship is
called a superclass/subclass
relationship for java classes
Just
like in real life the child/subclass
inherits all the parent/superclass’
variables and methods
44
Copyright 2015 by Janson Industries
Superclass
For example, an EditText class is
a visual component that a user
can enter text into
This is it’s lineage:
Object
View
TextView
EditText
45
Copyright 2015 by Janson Industries
Import Statements
All the java classes in the SDK are
stored in packages
To use these classes you can
specify the location (i.e. the
package(s) that hold them
android.app.Activity
android.os.Bundle
Copyright 2015 by Janson Industries
This is called a fully qualified file
reference
46
Import Statements
Fully qualified file references
mean extra typing and more errors
If import statements are added we
can use non-fully qualified file
references for the classes
(Activity, Bundle )
import android.app.Activity;
import android.os.Bundle;
47
Copyright 2015 by Janson Industries
Import Statements
The import statements come after
the package statement but before
the class header
Now if we want to use the Bundle
class we can type
Bundle
Instead of
android.os.Bundle
48
Copyright 2015 by Janson Industries
Import Statements
So you can use fully qualified file
references like this :
public void onCreate(android.os.Bundle aBundle) {
Or use import statements and non-
fully qualified file references like
this :
public void onCreate(Bundle aBundle) {
49
Copyright 2015 by Janson Industries
Activity Classes
To define the class as an activity
(I.e. a subclass of the Activity
class) an extends clause must be
included in the class header as
follows:
public class HowdyActivity extends Activity {
Comments (non-executable
statements) preceded by //
50
Copyright 2015 by Janson Industries
Putting It All Together
package my.first.pkg;
import android.app.Activity;
import android.os.Bundle;
//Identifies the package the class is in
//Identifies the location of classes
//this class will be using
public class HowdyActivity extends Activity {
//Class header
//Method header
public void onCreate(Bundle savedInstanceState) {
//Superclass’ onCreate method invoked
super.onCreate(savedInstanceState);
//String variable defined and initialized
String greeting = new String("******Hello*******");
//Two lines of text are displayed
System.out.println("A print of static text");
System.out.println("The value of greeting is: " + greeting);
}
}Copyright 2015 by Janson Industries
51
Putting It All Together
So in HowdyActivity:
Comment
out the one
setContentView statement
Precede
the statement with //
Keystroke short cut:
• Select the statement
• Click Ctrl+/
After
the commented out statement,
add the three statements from the
previous slide that
Create
the String variable
Display the two lines of text
Copyright 2015 by Janson Industries
52
Putting It All Together
Code should look like this
53
Copyright 2015 by Janson Industries
Running the New App
In the Package Explorer view,
select the MyFirstProject
Click the Run button (green circle
with white arrow head)
You’ll be prompted to save the
changes
Click Yes
Nothing happened!?!
This
gives us the opportunity to
introduce LogCat
Copyright 2015 by Janson Industries
54
LogCat
LogCat holds all the system
generated msgs and any println
statements run in the code
If LogCat not displayed at bottom
of window, display by clicking:
Window
Show
View
Other
Android
(to expand it)
LogCat
Copyright 2015 by Janson Industries
OK
55
LogCat
If your LogCat has no msgs (as
below) it is because the emulator
doesn’t have “focus”
56
Copyright 2015 by Janson Industries
Switch to DDMS perspective (Window, Open
Perspective) and click on the emulator in the
Devices view
57
Copyright 2015 by Janson Industries
If nothing appears, click the down arrow and
select Reset adb
Emulator will be redisplayed
58
Copyright 2015 by Janson Industries
Go back to the Java perspective and scroll to the
right in LogCat to display all the text
Common mistake: looking at the console not LogCat
59
Copyright 2015 by Janson Industries
If app rerun, info will not be redisplayed because
app is already created
Prove by clearing LogCat and rerunning
60
Copyright 2015 by Janson Industries
New system msgs will be there but not the text
from the app
This brings up the Android application life cycle!
61
Copyright 2015 by Janson Industries
Application Life Cycle
▀
There are 4 states that an
application can be in
Active:
the activity can be used by the
user
Paused:
The activity is partially
obscured (a new non-full screen or
transparent activity is active)
Stopped:
The activity is totally
obscured (a new full screen activity is
active)
Finished:
Copyright 2015 by Janson Industries
the activity has been closed.
62
Application Life Cycle
▀
Based on changes in the
application’s “state”, several other
methods will be called :
protected
void onStart(){}
protected
void onRestart(){}
protected
void onResume(){}
protected
void onPause(){}
protected
void onStop(){}
protected
void onDestroy(){}
63
Copyright 2015 by Janson Industries
Application Life Cycle
▀
▀
An application’s “state” can be
changed by user actions like:
Starting
a new application
Closing
an application
What the new state will be will vary
by what is being run
Does
new app take up the whole
screen?
Is
Copyright 2015 by Janson Industries
there enough MM for new app?
64
Application Life Cycle
▀
For example, when an app is
first run it means the following
methods will be run:
onCreate()
onStart()
onResume()
▀
Let’s prove it!
65
Copyright 2015 by Janson Industries
Application Life Cycle
▀
We’ll add the following two new
methods:
protected void onStart(){
super.onStart();
System.out.println("*****onStart was run");
}
protected void onResume(){
super.onStart();
System.out.println("*****onResume was run");
}
▀
And change onCreate a little
66
Copyright 2015 by Janson Industries
Here’s all the new code
67
Copyright 2015 by Janson Industries
Application Life Cycle
▀
▀
Need a new emulator with the
buttons enabled
Need to clone a definition
Only
user defined emulators can
be edited
▀
Start the AVD manager
68
Copyright 2015 by Janson Industries
Click Device Definitions tab then
Double click Galaxy Nexus
definition
Edit definition,
Copyright 2015click
by Janson Industries
Clone Device
69
▀
▀
▀
▀
Define new AVD
Select the first
Galaxy Nexus
listed
If correct one
selected, RAM
will be 512
Fill in rest of info
70
Copyright 2015 by Janson Industries
Select and Start the new emulator
71
Copyright 2015 by Janson Industries
Run app and LogCat shows the msgs
72
Copyright 2015 by Janson Industries
In emulator, click home button to stop the app
Run the app again
73
Copyright 2015 by Janson Industries
Scroll up and notice onCreate was not run, that’s
because app was already created but stopped
74
Copyright 2015 by Janson Industries
Activity
Started
The Whole Thing
on
Restart
on
Create
on
Start
on
Resume
Paused
on
Pause
Active
on
Stop
Stopped
on
Destroy
Finished
Whoa! Maybe we should
go step by step
75
Copyright 2015 by Janson Industries
In the Beginning
▀
When the application is first run…
on
Create
on
Start
on
Resume
Active
Activity
Started
76
Copyright 2015 by Janson Industries
From an Active State
▀
The application can go to any of
the other three states…
Active
on
Pause
Active
on
Pause
on
Stop
Stopped
Active
on
Pause
on
Stop
on
Destroy
Paused
Finished
77
Copyright 2015 by Janson Industries
From an Paused State
▀
The application can go Active or
Stopped states…
on
Resume
Active
on
Stop
Stopped
Paused
78
Copyright 2015 by Janson Industries
From an Stopped State
▀
The application can go to Finished
or Active states…
on
Destroy
Finished
Stopped
on
Restart
on
Start
on
Resume
Active
79
Copyright 2015 by Janson Industries
Android App Life Cycle
▀
▀
Why all the different methods?
You might want the app to do
different functions when the state
is changed
When
closed, free up resources
When
restarted, refresh info on
screen
When
paused, stop playing music
80
Copyright 2015 by Janson Industries
Emulator Glitches
▀
When emulator run, message
that says something like:
Image
▀
is used by another emulator
Need to go out and delete these
two files in the emulator definition
C:/Users/username/.android/avd/EmulatorName/cache.img
C:/Users/username/.android/avd/EmulatorName/userdata-qemu.img
▀
Substituting for username and
emulator name
81
Copyright 2015 by Janson Industries
Emulator Glitches
▀
▀
If it starts running slowly or if
logcat isn’t working well
Not
displaying msgs quickly
Not
allowing msg deletions
Restart Eclipse
▀
Gives Eclipse a chance to clean
up internally
82
Copyright 2015 by Janson Industries
Emulator Glitches
▀
If you get this msg:
ADB
server didn't ACK, failed to
start daemon
▀
▀
Start Task Manager and kill the
adb.exe process
Close and restart Eclipse
83
Copyright 2015 by Janson Industries
Points to Remember
▀
▀
▀
▀
Copyright 2015 by Janson Industries
Java classes stored in a project's
package
Java class consists of global
level variables and methods
Java method consists of local
level variables and executable
statements
Activity classes are executable
84
Points to Remember
▀
▀
LogCat displays system and
program msgs
An app can be in four states
Active
Paused
Stopped
Finished
▀
Changes in state will result in
different methods being executed
85
Copyright 2015 by Janson Industries