SlideShare a Scribd company logo
Android
Application’s Life Cycle
Notes are based on:
Unlocking Android
by Frank Ableson, Charlie Collins, and Robi Sen.
ISBN 978-1-933988-67-2
Manning Publications, 2009.
Android Developers
http://developer.android.com/index.html
Part 3
2
3. Android – Application's Life Cycle
Outline
• Android Applications
• Activity, Service, Broadcast receiver, Content provider
• process
• Application’s Life Cycle
• Activity Stack
• Life Cycle States
• Life Cycle Events
• Application’s Lifetime: Visible Lifetime Foreground Lifetime
• Life Cycle Methods: onCreate(), onStart(), onDestroy()...
• Example: LifeCycleDemo
2
3
3. Android – Application's Life Cycle
Android Applications
M t ng d ng (application) bao g m m t ho c vàiộ ứ ụ ồ ộ ặ component
đ c đ nh nghĩa trong manifest file c a ng d ng, g m cácượ ị ủ ứ ụ ồ
lo i:ạ
1. Activity
2. Service
3. BroadcastReceiver
4. ContentProvider
ng d ng Android so v i Java application:Ứ ụ ớ
• Cũng vi t 1 class đ th c hi n m t công vi c nào đóế ể ự ệ ộ ệ
• Không dùng hàm main kh i t o m t object thu c class đóở ạ ộ ộ
và g i ph ng th c c a nóọ ươ ứ ủ
• Tùy theo lo i object (Activity, Service....), Android s g iạ ẽ ọ
constructor và qu n lý vòng đ i c a object đóả ờ ủ 3
4
3. Android – Application's Life Cycle
Android Applications
1. Activity
M tộ activity th ng trình di n m tườ ễ ộ giao di n ng i dùng đ n b ngệ ườ ơ ằ
hình nhả mà t đó có th th c hi n m t s hành đ ng (action).ừ ể ự ệ ộ ố ộ
Tuy các activity c ng tác v i nhau đ h p thành m t giao di n ng i dùngộ ớ ể ợ ộ ệ ườ
th ng nh t,ố ấ m i activity có tính đ c l p v i các activity khácỗ ộ ậ ớ .
Thông th ng,ườ m t activity đ c đánh d u làm activity đ u tiên –ộ ượ ấ ầ cái
s đ c trình di n cho ng i dùng khi ng d ng đ c b t lên.ẽ ượ ễ ườ ứ ụ ượ ậ
Vi c g i m t activity t bên trong m t activity khác đ c th c hi n qua vi cệ ọ ộ ừ ộ ượ ự ệ ệ
activity hi n hành g i activity ti p theo qua c chệ ọ ế ơ ế intent.
(startActivity(Intent))
4
5
3. Android – Application's Life Cycle
Android Applications
2. Service
M t service không có giao di n ng i dùng b ng hình nh, thay vào đó, nó ch yộ ệ ườ ằ ả ạ
n t i background trong m t kho ng th i gian không xác đ nh.ẩ ạ ộ ả ờ ị
Có th k t n i (ể ế ố bind to) v i m t service đang ch y (ho c ch y service đó n u nóớ ộ ạ ặ ạ ế
hi n ch a ch y).ệ ư ạ
Trong khi đang k t n i, ta có th liên l c v i service đó qua m t giao di n mà nóế ố ể ạ ớ ộ ệ
cung c p.ấ
5
6
3. Android – Application's Life Cycle
Android Applications
3. Broadcast receiver
M tộ broadcast receiver là m t component không làm gì ngoài vi cộ ệ nh n và ph nậ ả
ng v i các broadcast announcement.ứ ớ
Nhi u broadcast b t ngu n t mã h th ng (ví d “you got mail“), nh ng b tề ắ ồ ừ ệ ố ụ ư ấ
c ng d ng nào cũng có th phát broadcast.ứ ứ ụ ể
Broadcast receiver không hi n th giao di n ng i dùng.ể ị ệ ườ Tuy nhiên, chúng có
th b t m t activity đ đáp ng thông tin mà chúng nh n đ c, ho c -ể ậ ộ ể ứ ậ ượ ặ
gi ng nh cách làm c a các service – chúng có th dùng notificationố ư ủ ể
manager đ thông báo cho ng i dùng.ể ườ
6
7
3. Android – Application's Life Cycle
Android Applications
4. Content provider
M tộ content provider cung c p m t t p d li u c a m t ng d ng cho các ngấ ộ ậ ữ ệ ủ ộ ứ ụ ứ
d ng khác.ụ
D li u th ng đ c l u trong h th ng file, ho c trong m t CSDL SQLite.ữ ệ ườ ượ ư ệ ố ặ ộ
M i content provider cài đ t m t t p chu n các ph ng th c cho phép các ngỗ ặ ộ ậ ẩ ươ ứ ứ
d ng khác l y và l u tr d li u thu c lo i mà nó ki m soát.ụ ấ ư ữ ữ ệ ộ ạ ể
Tuy nhiên, các ng d ng không g i tr c ti p các ph ng th c này. Thay vào đó,ứ ụ ọ ự ế ươ ứ
chúng dùng m t đ i t ngộ ố ượ content resolver và g i các ph ng th cọ ươ ứ
c a đ i t ng đó. M t content resolver có th nói chuy n v i m tủ ố ượ ộ ể ệ ớ ộ
content provider b t kì; nó c ng tác v i provider đ qu n lý quá trìnhấ ộ ớ ể ả
liên l c xuyên ti n trình (interprocess communication) phát sinh.ạ ế
7
8
3. Android – Application's Life Cycle
Android Applications
M i ng d ng Android ch y trong m t ti n trình riêngỗ ứ ụ ạ ộ ế
(cùng v i th c th máy o Dalvik c a riêng nóớ ự ể ả ủ ).
M i khi có m t request c n đ c x lý b i m t component c th nào đó,ỗ ộ ầ ượ ử ở ộ ụ ể
• Android đ m b o r ng ti n trình ng d ng c a component đó đangả ả ằ ế ứ ụ ủ
ch y,ạ
• kh i đ ng nó n u c n, vàở ộ ế ầ
• đ m b o r ng có s n m t th c th (instance) c a component đó, n uả ả ằ ẵ ộ ự ể ủ ế
c n thì t o ra th c th đó.ầ ạ ự ể
8
9
3. Android – Application's Life Cycle
Application’s Life Cycle
M t ti n trình Linux dành cho m t ng d ng Android đ c t o ra choộ ế ộ ứ ụ ượ ạ
ng d ng đó khi có m t s ph n code c a ng d ng đó c nứ ụ ộ ố ầ ủ ứ ụ ầ
ch y.ạ
Ti n trình đó s t n t i cho đ n khiế ẽ ồ ạ ế
1. không còn c n đ n nó n a,ầ ế ữ HO CẶ
2. h th ng c n thu h i b nh đ cho các ng d ng khác dùng.ệ ố ầ ồ ộ ớ ể ứ ụ
9
10
3. Android – Application's Life Cycle
Application’s Life Cycle
M t tính ch t đ c bi t nh ng căn b n c a Android là các ti n trìnhộ ấ ặ ệ ư ả ủ ế
không tr c ti p ki m soát vòng đ i c a chính mình.ự ế ể ờ ủ
Thay vào đó, s ph n c a nó đ c h th ng quy t đ nh d a trên thôngố ậ ủ ượ ệ ố ế ị ự
tin về
1. Các ph n ng d ng hi n đang ch y,ầ ứ ụ ệ ạ
2. T m quan tr ng c a chúng đ i v i ng i dùngầ ọ ủ ố ớ ườ
3. H th ng còn bao nhiêu b nh .ệ ố ộ ớ
10
11
3. Android – Application's Life Cycle
Component Lifecycles
11
Các component c a ng d ng có m tủ ứ ụ ộ vòng đ i (lifecycle)ờ
1. b t đ u:ắ ầ khi Android t o th c th c a component đ đápạ ự ể ủ ể
ng các intentứ
2. k t thúc:ế khi các th c th đó b h y.ự ể ị ủ
3. gi a ch ngữ ừ : đôi khi chúng có thể active ho cặ inactive, hay
trong tr ng h p c a các activity-ườ ợ ủ visible ho cặ invisible đ iố
v i ng i dùng.ớ ườ
Life as an Android Application:
Active / Inactive
Visible / Invisible
Start End
12
3. Android – Application's Life Cycle
Activity Stack
12
• Các activity trong h th ng đ c qu n lý b ng m tệ ố ượ ả ằ ộ activity
stack.
• Khi m t activity m i đ c b t, nó đ c đ t trênộ ớ ượ ậ ượ ặ đ nhỉ stack
và tr thành running activity -- activity tr c nó n m bênở ướ ằ
d i trong stack, và s không hi n tr l i t i foregroundướ ở ẽ ệ ở ạ ạ
(đ nh stack) cho đ n khi activity m i k t thúc.ỉ ế ớ ế
• N u ng i dùng nh n phímế ườ ấ Back, activity ti p theo trongế
stack s d ch lên và chuy n sang tr ng thái ho t đ ngẽ ị ể ạ ạ ộ
(active).
13
3. Android – Application's Life Cycle
Activity Stack
13
New Activity
Activity 1
Activity 2
Activity 3
Last Running
Activity
Activity n-1
. . .
Running Activity
New Activity
sta
rte
d
Back button pushed or
running
activity closed
Activity Stack
Previous
Activities Removed to
free
resou
rces
Figure 1.
14
3. Android – Application's Life Cycle
Life Cycle States
14
An activity has essentially
three states:
1. It is active or running
2. It is paused or
3. It is stopped .
Figure 2.
M t activity v căn b n có ba tr ng thái:ộ ề ả ạ
1. Active / running: đang t iở ạ foreground c a màn hìnhủ
(trên đ nh c aỉ ủ activity stack), đang ch y.ạ
1. Paused: m t focus, v n đ c hi n th trên màn hìnhấ ẫ ượ ể ị
nh ng m t activity khác đang n m trên nó và cáiư ộ ằ
activity m i này ho c có n n trong su t ho c khôngớ ặ ề ố ặ
ph kín màn hình.ủ M t activity tr ng tháiộ ở ạ
paused có th b h th ng kill n u tình tr ng r tể ị ệ ố ế ở ạ ấ
thi u b nh .ế ộ ớ
2. D ng (stopped)ừ b m t activity khác che khu t hoànị ộ ấ
toàn. Nó v n gi t t c các thông tin v tr ng thái vàẫ ữ ấ ả ề ạ
member. H th ng th ng kill nó n u c n b nh choệ ố ườ ế ầ ộ ớ
vi c khác.ệ
1515
3. Android – Application's Life Cycle
Life Cycle States
15
16 16
3. Android – Application's Life Cycle
Application’s
Life Cycle
Figure 3.
17
3. Android – Application's Life Cycle
Life Cycle Events
17
Summary: APP MILESTONES
N u m t activity tr ng thái paused hay stopped, h th ng có th lo i nó ra kh iế ộ ở ạ ệ ố ể ạ ỏ
b nh b ng cách yêu c u nó k t thúc (g i ph ng th cộ ớ ằ ầ ế ọ ươ ứ finish() c a nó),ủ
ho c đ n gi n là kill ti n trình c a nó.ặ ơ ả ế ủ
Khi nó l i đ c hi n th tr l i cho ng i dùng, nó ph i đ c b t l i (restart) t đ uạ ượ ể ị ở ạ ườ ả ượ ậ ạ ừ ầ
và khôi ph c v tr ng thái cũ.ụ ề ạ
Khi m t activity chuy n tr ng thái, nó đ c h th ng thông báo v s thay đ i đóộ ể ạ ượ ệ ố ề ự ổ
b ng các l i g i t i các ph ng th c sau (ằ ờ ọ ớ ươ ứ transition methods):
void onCreate(Bundle
savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
18
3. Android – Application's Life Cycle
Life Cycle Events
18
Ta có th override t t c các ph ng th c đó đ ng d ng có ho t đ ngể ấ ả ươ ứ ể ứ ụ ạ ộ
thích h p khi tr ng thái thay đ i.ợ ạ ổ
(B T BU CẮ Ộ )
T t c các activity ph i cài đ tấ ả ả ặ onCreate() đ th c hi n kh i t oể ự ệ ở ạ
khi đ i đ ng v a đ c t o (instantiated).ố ượ ừ ượ ạ
(R t nênấ )
Nhi u activity càiề onPause() đ ghi nh n các thay đ i v d li uể ậ ổ ề ữ ệ
(commit) và chu n b cho vi c ng ng t ng tác v i ng i dùng.ẩ ị ệ ừ ươ ớ ườ
19
3. Android – Application's Life Cycle
Application’s Lifetime
19
Entire Lifetime
B y ph ng th c chuy n tr ng thái (Figure 3) xác đ nh toàn b cu c đ iả ươ ứ ể ạ ị ộ ộ ờ
c a m t activity.ủ ộ
• Toàn b cu c đ iộ ộ ờ c a m t activity b t đ u t l i g iủ ộ ắ ầ ừ ờ ọ onCreate()
đ u tiên t i m t l i g iầ ớ ộ ờ ọ onDestroy() duy nh t cu i cùng.ấ ố
• M t activity th c hi n toàn b công vi c kh i t o tr ng tháiộ ự ệ ộ ệ ở ạ ạ
"global" t iạ onCreate(), và tr l i t t c các tài nguyên còn gi t iả ạ ấ ả ữ ạ
onDestroy().
20
3. Android – Application's Life Cycle
Visible Lifetime
20
Visible Lifetime
visible lifetime c a m t activity kéo dài t m t l i g iủ ộ ừ ộ ờ ọ onStart() t i l i g iớ ờ ọ
t ng ng t iươ ứ ớ onStop().
Trong kho ng th i gian này, ng i dùng có th nhìn th y activityả ờ ườ ể ấ
đó trên màn hình, tuy nó có th không n m t i foreground vàể ằ ạ
t ng tác v i ng i dùng.ươ ớ ườ
• Các ph ng th cươ ứ onStart() và onStop() có th đ c g i nhi u l n,ể ượ ọ ề ầ
khi activity chuy n gi a hai tr ng thái hi n và b che đ i v i ng iể ữ ạ ệ ị ố ớ ườ
dùng.
• Gi a hai ph ng th c này, ta có th gi các tài nguyên c n thi tữ ươ ứ ể ữ ầ ế
cho vi c hi n th activity trên màn hình.ệ ể ị
2121
3. Android – Application's Life Cycle
Foreground Lifetime
21
Foreground Lifetime
foreground lifetime c a m t activity b t đ u t m t l i g iủ ộ ắ ầ ừ ộ ờ ọ onResume() và
k t thúc b i l i g i t ng ng t iế ở ờ ọ ươ ứ ớ onPause().
Trong kho ng th i gian này, activity đó đ ng tr c m i activity khácả ờ ứ ướ ọ
trên màn hình và nó t ng tác v i ng i dùng.ươ ớ ườ
M t activity có th th ng xuyên chuy n qua l i gi a các tr ng tháiộ ể ườ ể ạ ữ ạ
resumed và paused
22
3. Android – Application's Life Cycle
Life Cycle Methods
22
Method: onCreate()
• Đ c g i khi activity đ c t o.ượ ọ ượ ạ
• Đây là n i ta nên th c hi n kh i t o tĩnh thông th ng —ơ ự ệ ở ạ ườ
t o giao di n ng i dùng (các view), n i d li u v i các danhạ ệ ườ ố ữ ệ ớ
sách, v.v..
• Tham s đ c truy n m t đ i t ngố ượ ề ộ ố ượ Bundle ch a tr ng tháiứ ạ
cũ c a activity, n u nh tr ng thái đã đ c ghi l i.ủ ế ư ạ ượ ạ
• onStart() luôn đ c g i sau đó.ượ ọ
23
3. Android – Application's Life Cycle
Life Cycle Methods
23
Method: onRestart()
• Đ c g i ngay tr c khi activity đ c kh i đ ng l i sau khiượ ọ ướ ượ ở ộ ạ
đã b d ng (stopped).ị ừ
• onStart() luôn đ c g i sau đó.ượ ọ
Method: onStart()
• Đ c g i ngay tr c khi activity đ c hi n trên màn hìnhượ ọ ướ ượ ệ
(visible).
• Ti p theo làế onResume() n u activity lên foreground, ho cế ặ
onStop() n u nó b che.ế ị
24
3. Android – Application's Life Cycle
Life Cycle Methods
24
Method: onResume()
1. Đ c g i ngay tr c khi activity b t đ u t ng tác v i ng iượ ọ ướ ắ ầ ươ ớ ườ
dùng.
2. T i th i đi m này, activity n m trên đ nh activity stack vàạ ờ ể ằ ỉ
nh n input c a ng i dùng.ậ ủ ườ
3. Ti p theo bao gi cùng làế ờ onPause().
25
3. Android – Application's Life Cycle
Life Cycle Methods
25
Method: onPause()
1. Đ c g i khi h th ng chu n b chuy n sang m t activityượ ọ ệ ố ẩ ị ể ộ
khác.
2. Ph ng th c này th ng dùng đ ghi các thay đ i ch aươ ứ ườ ể ổ ư
đ c l u, d ng ho t hình và nh ng công vi c t n CPU khác,ượ ư ừ ạ ữ ệ ố
v.v..
3. Nó nên làm công vi c c a mình th t nhanh vì activity ti pệ ủ ậ ế
theo ph i đ i nó k t thúc thì m i resume đ c.ả ợ ế ớ ượ
• Ti p theo làế onResume() n u activity quay l i, ho cế ạ ặ onStop()
n u nó không còn đ c hi n th đ i v i ng i dùng.ế ượ ể ị ố ớ ườ
• Activity trong tr ng thái này có th b h th ngạ ể ị ệ ố kill.
26
3. Android – Application's Life Cycle
Life Cycle Methods
26
Method: onStop()
1. Đ c g i khi activity không còn hi n th đ i v i ng i dùng.ượ ọ ể ị ố ớ ườ
2. Vi c này có th x y ra khi nó b h y (destroyed), ho c doệ ể ả ị ủ ặ
m t activity khác (cũ ho c m i) đã đ c resume và che nó.ộ ặ ớ ượ
3. Ti p theo làế onRestart() n u activity t ng tác tr lo i v iế ươ ở ạ ớ
ng i dùng, ho cườ ặ onDestroy() n u nó không quay l i.ế ạ
4. H th ng có th kill activity trong tr ng thái này.ệ ố ể ạ
27
3. Android – Application's Life Cycle
Life Cycle Methods
27
Method: onDestroy()
1. Đ c g i tr c khi activity b h y.ượ ọ ướ ị ủ
2. Đây là l i g i hàm cu i cùng mà activity nh n đ c.ờ ọ ố ậ ượ
3. Nó có th đ c g i vì activity đang k t thúc (hàmể ượ ọ ế finish() c aủ
activity đ c g i), ho c vì h th ng đang t m th i h y th cượ ọ ặ ệ ố ạ ờ ủ ự
th hi n t i c a activity đ ti t ki m không gian b nh .ể ệ ạ ủ ể ế ệ ộ ớ
• Ta có th phân bi t hai tình hu ng trên b ng cách dùngể ệ ố ằ
ph ng th cươ ứ isFinishing().
• H th ng có th kill activity trong tr ng thái này.ệ ố ể ạ
28
3. Android – Application's Life Cycle
Life Cycle Methods
28
Killable States – các tr ng thái mà h th ng kill đ cạ ệ ố ượ
• Activity tr ng thái killable có th b h th ng k t thúcở ạ ể ị ệ ố ế b t cấ ứ
lúc nào sau khi ph ng th c tr v mà không th c thi thêmươ ứ ả ề ự
m t dòng l nh nào trong mã c a activityộ ệ ủ .
• Ba ph ng th cươ ứ onPause(), onStop(), và onDestroy() d n đ nẫ ế
tr ng tháiạ killable.
• onPause() là ph ng th c duy nh t đ m b o đ c g i tr cươ ứ ấ ả ả ượ ọ ướ
khi ti n trình b h y (killed) —ế ị ủ onStop() và onDestroy() có thể
không đ c g i.ượ ọ
• Do đó, ta nên dùng onPause() đ l u d li u c n gi l i (ch ngể ư ữ ệ ầ ữ ạ ẳ
h n các s a đ i c a ng i dùng).ạ ử ổ ủ ườ
As an aside…
Android Preferences
Preference là m t c ch g n nh đ l u tr và đ c các c pộ ơ ế ọ ẹ ể ư ữ ọ ặ key-value thu cộ
các ki u d li u c b n. Nó th ng đ c dùng đ l u các preferenceể ữ ệ ơ ả ườ ượ ể ư
c a ng d ng, ch ng h n nh l i chào m ng m c đ nh ho c m t fontủ ứ ụ ẳ ạ ư ờ ừ ặ ị ặ ộ
ch c n n p khi ng d ng đ c b t lên.ữ ầ ạ ứ ụ ượ ậ
G iọ Context.getSharedPreferences() đ đ c và ghi các giá tr .ể ọ ị
Gán tên cho t p preference c a mình n u ta mu n dùng chúng t i cácậ ủ ế ố ạ
component khác trong cùng m t ng d ng, ho c dùngộ ứ ụ ặ
Activity.getPreferences() không có tên đ dùng riêng cho activityể
đang g i.ọ
Ta không th chia s preference cho các ng d ng khác (tr khi dùng contentể ẻ ứ ụ ừ
provider).
29
3. Android – Application's Life Cycle
Life Cycle Methods
29
30
3. Android – Application's Life Cycle
Example
Life Cycle
30
Example
ng d ng sau trình di nỨ ụ ễ
m t s tìnhộ ố
hu ng chuy nố ể
tr ng tháiạ
x y ra trong m t chuả ộ
trình s ng c aố ủ
m t activity đi nộ ể
hình.
LAYOUT
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myScreen"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ff000000"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<EditText
android:id="@+id/txtColorSelect"
android:hint="Background color (red, green, blue)"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</EditText>
<TextView
android:id="@+id/txtToDo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#00000000">
<!-- transparent -->
</TextView>
<Button
android:text=" Finish "
android:id="@+id/btnFinish"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
31
3. Android – Application's Life Cycle
Example: Life Cycle
31
Code: Life Cycle Demo. Part 1
package es.demo;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
//GOAL: show the following life-cycle events in action
//protected void onCreate(Bundle savedInstanceState);
//protected void onStart();
//protected void onRestart();
//protected void onResume();
//protected void onPause();
//protected void onStop();
//protected void onDestroy();
3232
3. Android – Application's Life Cycle
Example: Life Cycle
32
Code: Life Cycle Demo. Part 2
private LinearLayout myScreen;
private TextView txtToDo;
private EditText txtColorSelect;
private Button btnFinish;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myScreen = (LinearLayout) findViewById(R.id.myScreen);
txtToDo = (TextView) findViewById(R.id.txtToDo);
String msg = "Instructions: n "
+ "0. New instance (onCreate, onStart, onResume) n "
+ "1. Back Arrow (onPause, onStop, onDestroy) n "
+ "2. Finish (onPause, onStop, onDestroy) n "
+ "3. Home (onPause, onStop) n "
+ "4. After 3 > App Tab > re-execute current app n "
+ " (onRestart, onStart, onResume) n "
+ "5. Run DDMS > Receive a phone call or SMS n "
+ " (onRestart, onStart, onResume) n "
+ "6. Enter some data - repeat steps 1-5 n ";
txtToDo.setText(msg);
33
Code: Life Cycle Demo. Part 3
txtColorSelect = (EditText) findViewById(R.id.txtColorSelect);
// you may want to skip discussing the listener until later
txtColorSelect.addTextChangedListener(new TextWatcher(){
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,int after)
{
// TODO Auto-generated method stub
}
public void afterTextChanged(Editable s) {
changeBackgroundColor(s.toString());
}
});
btnFinish = (Button) findViewById(R.id.btnFinish);
btnFinish.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
finish();
}
});
Toast.makeText(getApplicationContext(), "onCreate", 1).show();
}
33
3. Android – Application's Life Cycle
Example: Life Cycle
33
3434
3. Android – Application's Life Cycle
Example: Life Cycle
34
Code: Life Cycle Demo. Part 4
@Override
protected void onPause() {
super.onPause();
saveDataFromCurrentState();
Toast.makeText(this, "onPause", 1).show();
}
@Override
protected void onRestart() {
super.onRestart();
Toast.makeText(this, "onRestart", 1).show();
}
@Override
protected void onResume() {
super.onResume();
Toast.makeText(this, "onResume", 1).show();
}
3535
3. Android – Application's Life Cycle
Example: Life Cycle
35
Code: Life Cycle Demo. Part 5
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
updateFromSavedState();
Toast.makeText(this, "onStart", 1).show();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Toast.makeText(this, "onDestroy", 1).show();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Toast.makeText(this, "onStop", 1).show();
}
36 36
3. Android – Application's Life Cycle
Example: Life Cycle
36
Code: Life Cycle Demo. Part 6
protected void saveDataFromCurrentState() {
SharedPreferences myPrefs = getSharedPreferences(MYPREFSID, actMode);
SharedPreferences.Editor myEditor = myPrefs.edit();
myEditor.putString("myBkColor", txtColorSelect.getText().toString());
myEditor.commit();
} // saveDataFromCurrentState
protected void updateFromSavedState() {
SharedPreferences myPrefs = getSharedPreferences(MYPREFSID, actMode);
if ((myPrefs != null) && (myPrefs.contains("myBkColor"))) {
String theChosenColor = myPrefs.getString("myBkColor","");
txtColorSelect.setText(theChosenColor);
changeBackgroundColor(theChosenColor);
}
} // updateFromSavedState
protected void clearMyPreferences() {
SharedPreferences myPrefs = getSharedPreferences(MYPREFSID, actMode);
SharedPreferences.Editor myEditor = myPrefs.edit();
myEditor.clear();
myEditor.commit();
} // clearMyPreferences
37
3. Android – Application's Life Cycle
Example: Life Cycle
37
Code: Life Cycle Demo. Part 7
private static String MYPREFSID; //used in part 6
private static int actMode; //used in part 6
private void changeBackgroundColor (String theChosenColor){
// change background color
if (theChosenColor.contains("red"))
myScreen.setBackgroundColor(0xffff0000);
else if (theChosenColor.contains("green"))
myScreen.setBackgroundColor(0xff00ff00);
else if (theChosenColor.contains("blue"))
myScreen.setBackgroundColor(0xff0000ff);
else {
//reseting user preferences
clearMyPreferences();
myScreen.setBackgroundColor(0xff000000);
}
}
3838
3. Android – Application's Life Cycle
Example: Life Cycle
38
Code: Life Cycle Demo. Part 8
/*
protected void onRestoreInstanceState(Bundle savedInstanceState)
This method is called after onStart() when the activity is being re-initialized
from a previously saved state.
The default implementation of this method performs a restore of any view state
that had previously been frozen by onSaveInstanceState(Bundle).
Ph ng th c này đ c g i sau onStart() khi activity đang đ c kh i t o l i tươ ứ ượ ọ ượ ở ạ ạ ừ
tr ng thái đã l u l i tr c đó. Cài đ t m c đ nh c a ph ng th c này khôi ph cạ ư ạ ướ ặ ặ ị ủ ươ ứ ụ
tr ng thái view đã đ c l u b i onSaveInstanceState(Bundle).ạ ượ ư ở
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Toast.makeText(getBaseContext(),
"onRestoreInstanceState ...BUNDLING",
Toast.LENGTH_LONG).show();
}
3939
3. Android – Application's Life Cycle
Example: Life Cycle
39
Code: Life Cycle Demo. Part 9
/*
protected void onSaveInstanceState(Bundle outState)
Called to retrieve per-instance state from an activity before being killed
so that the state can be restored in
onCreate(Bundle) or onRestoreInstanceState(Bundle)
(the Bundle populated by this method will be passed to both).
This method is called before an activity may be killed so that when it comes
back some time in the future it can restore its state. For example, if activity B
is launched in front of activity A, and at some point activity A is killed to
reclaim resources, activity A will have a chance to save the current state of
its user interface via this method so that when the user returns to activity A,
the state of the user interface can be restored via:
onCreate(Bundle) or onRestoreInstanceState(Bundle).
Ph ng th c này đ c g i tr c khi m t activity có th b kill sao cho khi nó quay l i nóươ ứ ượ ọ ướ ộ ể ị ạ
có th ph c h i tr ng thái c a mình. Ví d , khi activity A b h th ng kill đ l y tàiể ụ ồ ạ ủ ụ ị ệ ố ể ấ
nguyên, A s có c h i l u tr ng thái hi n hành c a giao di n ng i dùng b ng ph ngẽ ơ ộ ư ạ ệ ủ ệ ườ ằ ươ
th c này, đ khi ng i dùng quay l i activity A, tr ng thái c a giao di n ng i dùng cóứ ể ườ ạ ạ ủ ệ ườ
th đ c khôi ph c qua các ph ng th c onCreate(Bundle) ho cể ượ ụ ươ ứ ặ
onRestoreInstanceState(Bundle). (Đ i t ng Bundle mà ph ng th c này xây d ng s đ cố ượ ươ ứ ự ẽ ượ
truy n cho c hai ph ng th c khôi ph c đó)ề ả ươ ứ ụ
*/
4040
3. Android – Application's Life Cycle
Example: Life Cycle
40
Code: Life Cycle Demo. Part 10
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Toast.makeText(getBaseContext(),
"onSaveInstanceState ...BUNDLING",
Toast.LENGTH_LONG).show();
} // onSaveInstanceState
}//LifeCycleDemo
4141
3. Android – Application's Life Cycle
Example: Life Cycle
41
onCreate… onStart… onResume…
42
3. Android – Application's Life Cycle
Example: Life Cycle
42
onPause… onStop… onDestroy…
After pressing “Back Arrow”
Application’s Life Cycle
43
Questions ?
Application’s Life Cycle
44
Appendix
L u các thông tin tr ng thái khácư ạ
@Override
public void onCreate(Bundle savedInstanceState) {
... somevalue = savedInstanceState.getString(SOME_KEY);
...
}
...
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(SOME_KEY, "blah blah blah");
}
4545
3. Android – Application's Life Cycle
Homework
Your turn!
EXPERIMENT 1.
1. Vi t m t ng d ng Android. (“PuraVida”) đ th nghi m các vòng đ iế ộ ứ ụ ể ử ệ ờ
khác nhau c a ng d ng.ủ ứ ụ
2. Layout t iạ main.xml c n có m t Button (text: “Finish”, id: btnFinish) vàầ ộ
m t EditText container (txt: “” , id: txtMsg).ộ
3. Dùng ph ng th c onCreate đ n i button và textbox v i ch ng trình.ươ ứ ể ố ớ ươ
Thêm dòng mã sau:
Toast.makeText(this, "onCreate", 1).show();
1. Ph ng th c click ch có m t l nh:ươ ứ ỉ ộ ệ finish(); dùng đ k t thúc ng d ng.ể ế ứ ụ
Thêm m t l nh Toast (t ng t nh trên) cho t ng event trong 6 eventộ ệ ươ ự ư ừ
còn l i. Đ đ n gi n, hãy dùng menu Source > Override/Implementạ ể ơ ả
Methods… c a Eclipseủ
2. T i c a s option, đánh d u các event sau: onStart, onResume, onPause,ạ ử ổ ấ
onStop, onDestroy, onRestart
(đ ý xem có bao nhiêu ph ng th cể ươ ứ onEvent… t i đó!!!)ạ
6.L u ch ng trình.ư ươ
Teaching notes
4646
3. Android – Application's Life Cycle
Homework
Your turn!
EXPERIMENT 1 (cont.)
7. D ch và ch y ng d ng.ị ạ ứ ụ
8. Ghi l i chu i các message hi n th b i các l nh Toast.ạ ỗ ể ị ở ệ
9. Nh n nút FINISH. Quan sát chu i các tr ng thái.ấ ỗ ạ
10. Ch y l i ng d ngạ ạ ứ ụ
11. Nh n nút HOME c a emulator. Chuy n gì x y ra?ấ ủ ệ ả
• Click vào launch pad, tìm icon và quay l i ng d ng “PuraVida”. Chu iạ ứ ụ ỗ
message nào đ c hi n th ?ượ ể ị
• Click phím CALL c a emulator. ng d ng tr ng thái paused hayủ Ứ ụ ở ạ
stopped?
• Click phím BACK đ quay l i ng d ng.ể ạ ứ ụ
7. Long-tap vào nút HANG-UP. Chuy n gì x y ra?ệ ả
Teaching notes
4747
3. Android – Application's Life Cycle
Homework
Your turn!
EXPERIMENT 2
16. Ch y emulator th hai.ạ ứ
1. Th c hi n m t voice-call t i emulator th nh t hi n v n hi n th ngự ệ ộ ớ ứ ấ ệ ẫ ể ị ứ
d ng c a b n. Chuy n gì x y ra? (yêu c u đ ng b th i gian th c)ụ ủ ạ ệ ả ầ ồ ộ ờ ự
2. G i m t text-message t i emulator th nh t (yêu c u không đ ng b -ử ộ ớ ứ ấ ầ ồ ộ
asynchronous attention request)
16. Vi t m t câu vào EditText box (“these are the best moments of my life….”).ế ộ
17. Ch y l i ng d ng. Chuy n gì x y ra đ i v i dòng text?ạ ạ ứ ụ ệ ả ố ớ
Teaching notes
4848
3. Android – Application's Life Cycle
Homework
Your turn!
EXPERIMENT 3
Đ m b o tính b n v ng c a d li u (data persistency).ả ả ề ữ ủ ữ ệ
19. Thêm vào ph ng th cươ ứ onPause đo n sauạ
SharedPreferences myFile1 = getSharedPreferences("myFile1",
Activity.MODE_PRIVATE);
SharedPreferences.Editor myEditor = myFile1.edit();
String temp = txtMsg.getText().toString();
myEditor.putString("mydata", temp);
myEditor.commit();
• Thêm vào ph ng th cươ ứ onResume đo n sauạ
SharedPreferences myFile = getSharedPreferences("myFile1",
Activity.MODE_PRIVATE);
if ( (myFile != null) && (myFile.contains("mydata")) ) {
String temp = myFile.getString("mydata", "***");
txtMsg.setText(temp);
}
• Gi thì chuy n gì x y ra v i d li u đã nh p vào text box?ờ ệ ả ớ ữ ệ ậ
Teaching notes

More Related Content

Viewers also liked

Android OS
Android OSAndroid OS
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
Ngo Trung
 
Lap trinh android – kiem tien ngay trong khi hoc
Lap trinh android – kiem tien ngay trong khi hocLap trinh android – kiem tien ngay trong khi hoc
Lap trinh android – kiem tien ngay trong khi hoc
Học viện đào tạo CNTT NIIT iNET
 
Tìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành android
TÓc Đỏ XuÂn
 
Bài 1: Giới thiệu Android
Bài 1: Giới thiệu AndroidBài 1: Giới thiệu Android
Bài 1: Giới thiệu Androidhoccungdoanhnghiep
 
56123159 android
56123159 android56123159 android
56123159 androidHieu Pham
 
Android Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Android Nâng cao-Bài 5:Notification Multiresolution MultilanguageAndroid Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Android Nâng cao-Bài 5:Notification Multiresolution MultilanguagePhuoc Nguyen
 
Android Nâng cao-Bài 3: Broadcast Receiver
Android Nâng cao-Bài 3: Broadcast ReceiverAndroid Nâng cao-Bài 3: Broadcast Receiver
Android Nâng cao-Bài 3: Broadcast Receiver
Phuoc Nguyen
 
Android location sensor programming
Android location sensor programmingAndroid location sensor programming
Android location sensor programming
Phuoc Nguyen
 
Android Nâng cao-Bài 8-JSON & XML Parsing
Android Nâng cao-Bài 8-JSON & XML ParsingAndroid Nâng cao-Bài 8-JSON & XML Parsing
Android Nâng cao-Bài 8-JSON & XML ParsingPhuoc Nguyen
 
Android Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderAndroid Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content Provider
Phuoc Nguyen
 
Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Phuoc Nguyen
 
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnitAndroid Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnitPhuoc Nguyen
 

Viewers also liked (13)

Android OS
Android OSAndroid OS
Android OS
 
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
 
Lap trinh android – kiem tien ngay trong khi hoc
Lap trinh android – kiem tien ngay trong khi hocLap trinh android – kiem tien ngay trong khi hoc
Lap trinh android – kiem tien ngay trong khi hoc
 
Tìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành android
 
Bài 1: Giới thiệu Android
Bài 1: Giới thiệu AndroidBài 1: Giới thiệu Android
Bài 1: Giới thiệu Android
 
56123159 android
56123159 android56123159 android
56123159 android
 
Android Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Android Nâng cao-Bài 5:Notification Multiresolution MultilanguageAndroid Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Android Nâng cao-Bài 5:Notification Multiresolution Multilanguage
 
Android Nâng cao-Bài 3: Broadcast Receiver
Android Nâng cao-Bài 3: Broadcast ReceiverAndroid Nâng cao-Bài 3: Broadcast Receiver
Android Nâng cao-Bài 3: Broadcast Receiver
 
Android location sensor programming
Android location sensor programmingAndroid location sensor programming
Android location sensor programming
 
Android Nâng cao-Bài 8-JSON & XML Parsing
Android Nâng cao-Bài 8-JSON & XML ParsingAndroid Nâng cao-Bài 8-JSON & XML Parsing
Android Nâng cao-Bài 8-JSON & XML Parsing
 
Android Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderAndroid Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content Provider
 
Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development
 
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnitAndroid Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit
 

Similar to Android chapter03-life-cycle

Life cycle của Android
Life cycle của AndroidLife cycle của Android
Life cycle của Android
Nguyễn Anh
 
Android program 6167
Android program 6167Android program 6167
Android program 6167
PhongSPKT
 
Week 03-software process
Week 03-software processWeek 03-software process
Week 03-software processNguyen Tran
 
Tai lieu microsoft project 2007 smith.n
Tai lieu microsoft project 2007   smith.nTai lieu microsoft project 2007   smith.n
Tai lieu microsoft project 2007 smith.n
pvhdhxd
 
Cấu trúc android
Cấu trúc androidCấu trúc android
Cấu trúc android
dhinh_190192
 
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libreBai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Tony Khánh
 
Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Trần Thiên Đại
 
Gns3 documentation-vi
Gns3 documentation-viGns3 documentation-vi
Gns3 documentation-viHate To Love
 
Gns3 documentation
Gns3 documentationGns3 documentation
Gns3 documentation
tranbaanh
 
Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com]bookbooming1
 
Báo cáo thực tập chuyên nghành lập trình Android GPSGroup
Báo cáo thực tập chuyên nghành lập trình Android GPSGroupBáo cáo thực tập chuyên nghành lập trình Android GPSGroup
Báo cáo thực tập chuyên nghành lập trình Android GPSGroup
Tinh Ngo
 
Tìm hiểu và viết ứng dụng tra từ điển viết tắt của các thuật ngữ ngành IT trê...
Tìm hiểu và viết ứng dụng tra từ điển viết tắt của các thuật ngữ ngành IT trê...Tìm hiểu và viết ứng dụng tra từ điển viết tắt của các thuật ngữ ngành IT trê...
Tìm hiểu và viết ứng dụng tra từ điển viết tắt của các thuật ngữ ngành IT trê...
Nguyễn Plus
 
Các nguyên lý Hướng đối tượng
Các nguyên lý Hướng đối tượngCác nguyên lý Hướng đối tượng
Các nguyên lý Hướng đối tượng
Tam Thanh
 
Huong dan mo_phong_proteus
Huong dan mo_phong_proteusHuong dan mo_phong_proteus
Huong dan mo_phong_proteus
phuong le dinh
 
đTkh.ứng dụng tin học trong hoạt động kiểm toán nguyễn đình hựu[bookbooming...
đTkh.ứng dụng tin học trong hoạt động kiểm toán   nguyễn đình hựu[bookbooming...đTkh.ứng dụng tin học trong hoạt động kiểm toán   nguyễn đình hựu[bookbooming...
đTkh.ứng dụng tin học trong hoạt động kiểm toán nguyễn đình hựu[bookbooming...bookbooming1
 

Similar to Android chapter03-life-cycle (20)

Life cycle của Android
Life cycle của AndroidLife cycle của Android
Life cycle của Android
 
Quan ly bo nho
Quan ly bo nhoQuan ly bo nho
Quan ly bo nho
 
Android program 6167
Android program 6167Android program 6167
Android program 6167
 
Week 03-software process
Week 03-software processWeek 03-software process
Week 03-software process
 
Tai lieu microsoft project 2007 smith.n
Tai lieu microsoft project 2007   smith.nTai lieu microsoft project 2007   smith.n
Tai lieu microsoft project 2007 smith.n
 
Chuong 09 vb
Chuong 09   vbChuong 09   vb
Chuong 09 vb
 
Cấu trúc android
Cấu trúc androidCấu trúc android
Cấu trúc android
 
Bai giang ROBOT cong nghiep
Bai giang ROBOT cong nghiepBai giang ROBOT cong nghiep
Bai giang ROBOT cong nghiep
 
Chuong 10 multi user
Chuong 10   multi userChuong 10   multi user
Chuong 10 multi user
 
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libreBai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
 
Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)
 
Gns3 documentation-vi
Gns3 documentation-viGns3 documentation-vi
Gns3 documentation-vi
 
Gns3 documentation
Gns3 documentationGns3 documentation
Gns3 documentation
 
Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com]
 
Báo cáo thực tập chuyên nghành lập trình Android GPSGroup
Báo cáo thực tập chuyên nghành lập trình Android GPSGroupBáo cáo thực tập chuyên nghành lập trình Android GPSGroup
Báo cáo thực tập chuyên nghành lập trình Android GPSGroup
 
Tìm hiểu và viết ứng dụng tra từ điển viết tắt của các thuật ngữ ngành IT trê...
Tìm hiểu và viết ứng dụng tra từ điển viết tắt của các thuật ngữ ngành IT trê...Tìm hiểu và viết ứng dụng tra từ điển viết tắt của các thuật ngữ ngành IT trê...
Tìm hiểu và viết ứng dụng tra từ điển viết tắt của các thuật ngữ ngành IT trê...
 
Các nguyên lý Hướng đối tượng
Các nguyên lý Hướng đối tượngCác nguyên lý Hướng đối tượng
Các nguyên lý Hướng đối tượng
 
Nguyen lyoop
Nguyen lyoopNguyen lyoop
Nguyen lyoop
 
Huong dan mo_phong_proteus
Huong dan mo_phong_proteusHuong dan mo_phong_proteus
Huong dan mo_phong_proteus
 
đTkh.ứng dụng tin học trong hoạt động kiểm toán nguyễn đình hựu[bookbooming...
đTkh.ứng dụng tin học trong hoạt động kiểm toán   nguyễn đình hựu[bookbooming...đTkh.ứng dụng tin học trong hoạt động kiểm toán   nguyễn đình hựu[bookbooming...
đTkh.ứng dụng tin học trong hoạt động kiểm toán nguyễn đình hựu[bookbooming...
 

Android chapter03-life-cycle

  • 1. Android Application’s Life Cycle Notes are based on: Unlocking Android by Frank Ableson, Charlie Collins, and Robi Sen. ISBN 978-1-933988-67-2 Manning Publications, 2009. Android Developers http://developer.android.com/index.html Part 3
  • 2. 2 3. Android – Application's Life Cycle Outline • Android Applications • Activity, Service, Broadcast receiver, Content provider • process • Application’s Life Cycle • Activity Stack • Life Cycle States • Life Cycle Events • Application’s Lifetime: Visible Lifetime Foreground Lifetime • Life Cycle Methods: onCreate(), onStart(), onDestroy()... • Example: LifeCycleDemo 2
  • 3. 3 3. Android – Application's Life Cycle Android Applications M t ng d ng (application) bao g m m t ho c vàiộ ứ ụ ồ ộ ặ component đ c đ nh nghĩa trong manifest file c a ng d ng, g m cácượ ị ủ ứ ụ ồ lo i:ạ 1. Activity 2. Service 3. BroadcastReceiver 4. ContentProvider ng d ng Android so v i Java application:Ứ ụ ớ • Cũng vi t 1 class đ th c hi n m t công vi c nào đóế ể ự ệ ộ ệ • Không dùng hàm main kh i t o m t object thu c class đóở ạ ộ ộ và g i ph ng th c c a nóọ ươ ứ ủ • Tùy theo lo i object (Activity, Service....), Android s g iạ ẽ ọ constructor và qu n lý vòng đ i c a object đóả ờ ủ 3
  • 4. 4 3. Android – Application's Life Cycle Android Applications 1. Activity M tộ activity th ng trình di n m tườ ễ ộ giao di n ng i dùng đ n b ngệ ườ ơ ằ hình nhả mà t đó có th th c hi n m t s hành đ ng (action).ừ ể ự ệ ộ ố ộ Tuy các activity c ng tác v i nhau đ h p thành m t giao di n ng i dùngộ ớ ể ợ ộ ệ ườ th ng nh t,ố ấ m i activity có tính đ c l p v i các activity khácỗ ộ ậ ớ . Thông th ng,ườ m t activity đ c đánh d u làm activity đ u tiên –ộ ượ ấ ầ cái s đ c trình di n cho ng i dùng khi ng d ng đ c b t lên.ẽ ượ ễ ườ ứ ụ ượ ậ Vi c g i m t activity t bên trong m t activity khác đ c th c hi n qua vi cệ ọ ộ ừ ộ ượ ự ệ ệ activity hi n hành g i activity ti p theo qua c chệ ọ ế ơ ế intent. (startActivity(Intent)) 4
  • 5. 5 3. Android – Application's Life Cycle Android Applications 2. Service M t service không có giao di n ng i dùng b ng hình nh, thay vào đó, nó ch yộ ệ ườ ằ ả ạ n t i background trong m t kho ng th i gian không xác đ nh.ẩ ạ ộ ả ờ ị Có th k t n i (ể ế ố bind to) v i m t service đang ch y (ho c ch y service đó n u nóớ ộ ạ ặ ạ ế hi n ch a ch y).ệ ư ạ Trong khi đang k t n i, ta có th liên l c v i service đó qua m t giao di n mà nóế ố ể ạ ớ ộ ệ cung c p.ấ 5
  • 6. 6 3. Android – Application's Life Cycle Android Applications 3. Broadcast receiver M tộ broadcast receiver là m t component không làm gì ngoài vi cộ ệ nh n và ph nậ ả ng v i các broadcast announcement.ứ ớ Nhi u broadcast b t ngu n t mã h th ng (ví d “you got mail“), nh ng b tề ắ ồ ừ ệ ố ụ ư ấ c ng d ng nào cũng có th phát broadcast.ứ ứ ụ ể Broadcast receiver không hi n th giao di n ng i dùng.ể ị ệ ườ Tuy nhiên, chúng có th b t m t activity đ đáp ng thông tin mà chúng nh n đ c, ho c -ể ậ ộ ể ứ ậ ượ ặ gi ng nh cách làm c a các service – chúng có th dùng notificationố ư ủ ể manager đ thông báo cho ng i dùng.ể ườ 6
  • 7. 7 3. Android – Application's Life Cycle Android Applications 4. Content provider M tộ content provider cung c p m t t p d li u c a m t ng d ng cho các ngấ ộ ậ ữ ệ ủ ộ ứ ụ ứ d ng khác.ụ D li u th ng đ c l u trong h th ng file, ho c trong m t CSDL SQLite.ữ ệ ườ ượ ư ệ ố ặ ộ M i content provider cài đ t m t t p chu n các ph ng th c cho phép các ngỗ ặ ộ ậ ẩ ươ ứ ứ d ng khác l y và l u tr d li u thu c lo i mà nó ki m soát.ụ ấ ư ữ ữ ệ ộ ạ ể Tuy nhiên, các ng d ng không g i tr c ti p các ph ng th c này. Thay vào đó,ứ ụ ọ ự ế ươ ứ chúng dùng m t đ i t ngộ ố ượ content resolver và g i các ph ng th cọ ươ ứ c a đ i t ng đó. M t content resolver có th nói chuy n v i m tủ ố ượ ộ ể ệ ớ ộ content provider b t kì; nó c ng tác v i provider đ qu n lý quá trìnhấ ộ ớ ể ả liên l c xuyên ti n trình (interprocess communication) phát sinh.ạ ế 7
  • 8. 8 3. Android – Application's Life Cycle Android Applications M i ng d ng Android ch y trong m t ti n trình riêngỗ ứ ụ ạ ộ ế (cùng v i th c th máy o Dalvik c a riêng nóớ ự ể ả ủ ). M i khi có m t request c n đ c x lý b i m t component c th nào đó,ỗ ộ ầ ượ ử ở ộ ụ ể • Android đ m b o r ng ti n trình ng d ng c a component đó đangả ả ằ ế ứ ụ ủ ch y,ạ • kh i đ ng nó n u c n, vàở ộ ế ầ • đ m b o r ng có s n m t th c th (instance) c a component đó, n uả ả ằ ẵ ộ ự ể ủ ế c n thì t o ra th c th đó.ầ ạ ự ể 8
  • 9. 9 3. Android – Application's Life Cycle Application’s Life Cycle M t ti n trình Linux dành cho m t ng d ng Android đ c t o ra choộ ế ộ ứ ụ ượ ạ ng d ng đó khi có m t s ph n code c a ng d ng đó c nứ ụ ộ ố ầ ủ ứ ụ ầ ch y.ạ Ti n trình đó s t n t i cho đ n khiế ẽ ồ ạ ế 1. không còn c n đ n nó n a,ầ ế ữ HO CẶ 2. h th ng c n thu h i b nh đ cho các ng d ng khác dùng.ệ ố ầ ồ ộ ớ ể ứ ụ 9
  • 10. 10 3. Android – Application's Life Cycle Application’s Life Cycle M t tính ch t đ c bi t nh ng căn b n c a Android là các ti n trìnhộ ấ ặ ệ ư ả ủ ế không tr c ti p ki m soát vòng đ i c a chính mình.ự ế ể ờ ủ Thay vào đó, s ph n c a nó đ c h th ng quy t đ nh d a trên thôngố ậ ủ ượ ệ ố ế ị ự tin về 1. Các ph n ng d ng hi n đang ch y,ầ ứ ụ ệ ạ 2. T m quan tr ng c a chúng đ i v i ng i dùngầ ọ ủ ố ớ ườ 3. H th ng còn bao nhiêu b nh .ệ ố ộ ớ 10
  • 11. 11 3. Android – Application's Life Cycle Component Lifecycles 11 Các component c a ng d ng có m tủ ứ ụ ộ vòng đ i (lifecycle)ờ 1. b t đ u:ắ ầ khi Android t o th c th c a component đ đápạ ự ể ủ ể ng các intentứ 2. k t thúc:ế khi các th c th đó b h y.ự ể ị ủ 3. gi a ch ngữ ừ : đôi khi chúng có thể active ho cặ inactive, hay trong tr ng h p c a các activity-ườ ợ ủ visible ho cặ invisible đ iố v i ng i dùng.ớ ườ Life as an Android Application: Active / Inactive Visible / Invisible Start End
  • 12. 12 3. Android – Application's Life Cycle Activity Stack 12 • Các activity trong h th ng đ c qu n lý b ng m tệ ố ượ ả ằ ộ activity stack. • Khi m t activity m i đ c b t, nó đ c đ t trênộ ớ ượ ậ ượ ặ đ nhỉ stack và tr thành running activity -- activity tr c nó n m bênở ướ ằ d i trong stack, và s không hi n tr l i t i foregroundướ ở ẽ ệ ở ạ ạ (đ nh stack) cho đ n khi activity m i k t thúc.ỉ ế ớ ế • N u ng i dùng nh n phímế ườ ấ Back, activity ti p theo trongế stack s d ch lên và chuy n sang tr ng thái ho t đ ngẽ ị ể ạ ạ ộ (active).
  • 13. 13 3. Android – Application's Life Cycle Activity Stack 13 New Activity Activity 1 Activity 2 Activity 3 Last Running Activity Activity n-1 . . . Running Activity New Activity sta rte d Back button pushed or running activity closed Activity Stack Previous Activities Removed to free resou rces Figure 1.
  • 14. 14 3. Android – Application's Life Cycle Life Cycle States 14 An activity has essentially three states: 1. It is active or running 2. It is paused or 3. It is stopped . Figure 2.
  • 15. M t activity v căn b n có ba tr ng thái:ộ ề ả ạ 1. Active / running: đang t iở ạ foreground c a màn hìnhủ (trên đ nh c aỉ ủ activity stack), đang ch y.ạ 1. Paused: m t focus, v n đ c hi n th trên màn hìnhấ ẫ ượ ể ị nh ng m t activity khác đang n m trên nó và cáiư ộ ằ activity m i này ho c có n n trong su t ho c khôngớ ặ ề ố ặ ph kín màn hình.ủ M t activity tr ng tháiộ ở ạ paused có th b h th ng kill n u tình tr ng r tể ị ệ ố ế ở ạ ấ thi u b nh .ế ộ ớ 2. D ng (stopped)ừ b m t activity khác che khu t hoànị ộ ấ toàn. Nó v n gi t t c các thông tin v tr ng thái vàẫ ữ ấ ả ề ạ member. H th ng th ng kill nó n u c n b nh choệ ố ườ ế ầ ộ ớ vi c khác.ệ 1515 3. Android – Application's Life Cycle Life Cycle States 15
  • 16. 16 16 3. Android – Application's Life Cycle Application’s Life Cycle Figure 3.
  • 17. 17 3. Android – Application's Life Cycle Life Cycle Events 17 Summary: APP MILESTONES N u m t activity tr ng thái paused hay stopped, h th ng có th lo i nó ra kh iế ộ ở ạ ệ ố ể ạ ỏ b nh b ng cách yêu c u nó k t thúc (g i ph ng th cộ ớ ằ ầ ế ọ ươ ứ finish() c a nó),ủ ho c đ n gi n là kill ti n trình c a nó.ặ ơ ả ế ủ Khi nó l i đ c hi n th tr l i cho ng i dùng, nó ph i đ c b t l i (restart) t đ uạ ượ ể ị ở ạ ườ ả ượ ậ ạ ừ ầ và khôi ph c v tr ng thái cũ.ụ ề ạ Khi m t activity chuy n tr ng thái, nó đ c h th ng thông báo v s thay đ i đóộ ể ạ ượ ệ ố ề ự ổ b ng các l i g i t i các ph ng th c sau (ằ ờ ọ ớ ươ ứ transition methods): void onCreate(Bundle savedInstanceState) void onStart() void onRestart() void onResume() void onPause() void onStop() void onDestroy()
  • 18. 18 3. Android – Application's Life Cycle Life Cycle Events 18 Ta có th override t t c các ph ng th c đó đ ng d ng có ho t đ ngể ấ ả ươ ứ ể ứ ụ ạ ộ thích h p khi tr ng thái thay đ i.ợ ạ ổ (B T BU CẮ Ộ ) T t c các activity ph i cài đ tấ ả ả ặ onCreate() đ th c hi n kh i t oể ự ệ ở ạ khi đ i đ ng v a đ c t o (instantiated).ố ượ ừ ượ ạ (R t nênấ ) Nhi u activity càiề onPause() đ ghi nh n các thay đ i v d li uể ậ ổ ề ữ ệ (commit) và chu n b cho vi c ng ng t ng tác v i ng i dùng.ẩ ị ệ ừ ươ ớ ườ
  • 19. 19 3. Android – Application's Life Cycle Application’s Lifetime 19 Entire Lifetime B y ph ng th c chuy n tr ng thái (Figure 3) xác đ nh toàn b cu c đ iả ươ ứ ể ạ ị ộ ộ ờ c a m t activity.ủ ộ • Toàn b cu c đ iộ ộ ờ c a m t activity b t đ u t l i g iủ ộ ắ ầ ừ ờ ọ onCreate() đ u tiên t i m t l i g iầ ớ ộ ờ ọ onDestroy() duy nh t cu i cùng.ấ ố • M t activity th c hi n toàn b công vi c kh i t o tr ng tháiộ ự ệ ộ ệ ở ạ ạ "global" t iạ onCreate(), và tr l i t t c các tài nguyên còn gi t iả ạ ấ ả ữ ạ onDestroy().
  • 20. 20 3. Android – Application's Life Cycle Visible Lifetime 20 Visible Lifetime visible lifetime c a m t activity kéo dài t m t l i g iủ ộ ừ ộ ờ ọ onStart() t i l i g iớ ờ ọ t ng ng t iươ ứ ớ onStop(). Trong kho ng th i gian này, ng i dùng có th nhìn th y activityả ờ ườ ể ấ đó trên màn hình, tuy nó có th không n m t i foreground vàể ằ ạ t ng tác v i ng i dùng.ươ ớ ườ • Các ph ng th cươ ứ onStart() và onStop() có th đ c g i nhi u l n,ể ượ ọ ề ầ khi activity chuy n gi a hai tr ng thái hi n và b che đ i v i ng iể ữ ạ ệ ị ố ớ ườ dùng. • Gi a hai ph ng th c này, ta có th gi các tài nguyên c n thi tữ ươ ứ ể ữ ầ ế cho vi c hi n th activity trên màn hình.ệ ể ị
  • 21. 2121 3. Android – Application's Life Cycle Foreground Lifetime 21 Foreground Lifetime foreground lifetime c a m t activity b t đ u t m t l i g iủ ộ ắ ầ ừ ộ ờ ọ onResume() và k t thúc b i l i g i t ng ng t iế ở ờ ọ ươ ứ ớ onPause(). Trong kho ng th i gian này, activity đó đ ng tr c m i activity khácả ờ ứ ướ ọ trên màn hình và nó t ng tác v i ng i dùng.ươ ớ ườ M t activity có th th ng xuyên chuy n qua l i gi a các tr ng tháiộ ể ườ ể ạ ữ ạ resumed và paused
  • 22. 22 3. Android – Application's Life Cycle Life Cycle Methods 22 Method: onCreate() • Đ c g i khi activity đ c t o.ượ ọ ượ ạ • Đây là n i ta nên th c hi n kh i t o tĩnh thông th ng —ơ ự ệ ở ạ ườ t o giao di n ng i dùng (các view), n i d li u v i các danhạ ệ ườ ố ữ ệ ớ sách, v.v.. • Tham s đ c truy n m t đ i t ngố ượ ề ộ ố ượ Bundle ch a tr ng tháiứ ạ cũ c a activity, n u nh tr ng thái đã đ c ghi l i.ủ ế ư ạ ượ ạ • onStart() luôn đ c g i sau đó.ượ ọ
  • 23. 23 3. Android – Application's Life Cycle Life Cycle Methods 23 Method: onRestart() • Đ c g i ngay tr c khi activity đ c kh i đ ng l i sau khiượ ọ ướ ượ ở ộ ạ đã b d ng (stopped).ị ừ • onStart() luôn đ c g i sau đó.ượ ọ Method: onStart() • Đ c g i ngay tr c khi activity đ c hi n trên màn hìnhượ ọ ướ ượ ệ (visible). • Ti p theo làế onResume() n u activity lên foreground, ho cế ặ onStop() n u nó b che.ế ị
  • 24. 24 3. Android – Application's Life Cycle Life Cycle Methods 24 Method: onResume() 1. Đ c g i ngay tr c khi activity b t đ u t ng tác v i ng iượ ọ ướ ắ ầ ươ ớ ườ dùng. 2. T i th i đi m này, activity n m trên đ nh activity stack vàạ ờ ể ằ ỉ nh n input c a ng i dùng.ậ ủ ườ 3. Ti p theo bao gi cùng làế ờ onPause().
  • 25. 25 3. Android – Application's Life Cycle Life Cycle Methods 25 Method: onPause() 1. Đ c g i khi h th ng chu n b chuy n sang m t activityượ ọ ệ ố ẩ ị ể ộ khác. 2. Ph ng th c này th ng dùng đ ghi các thay đ i ch aươ ứ ườ ể ổ ư đ c l u, d ng ho t hình và nh ng công vi c t n CPU khác,ượ ư ừ ạ ữ ệ ố v.v.. 3. Nó nên làm công vi c c a mình th t nhanh vì activity ti pệ ủ ậ ế theo ph i đ i nó k t thúc thì m i resume đ c.ả ợ ế ớ ượ • Ti p theo làế onResume() n u activity quay l i, ho cế ạ ặ onStop() n u nó không còn đ c hi n th đ i v i ng i dùng.ế ượ ể ị ố ớ ườ • Activity trong tr ng thái này có th b h th ngạ ể ị ệ ố kill.
  • 26. 26 3. Android – Application's Life Cycle Life Cycle Methods 26 Method: onStop() 1. Đ c g i khi activity không còn hi n th đ i v i ng i dùng.ượ ọ ể ị ố ớ ườ 2. Vi c này có th x y ra khi nó b h y (destroyed), ho c doệ ể ả ị ủ ặ m t activity khác (cũ ho c m i) đã đ c resume và che nó.ộ ặ ớ ượ 3. Ti p theo làế onRestart() n u activity t ng tác tr lo i v iế ươ ở ạ ớ ng i dùng, ho cườ ặ onDestroy() n u nó không quay l i.ế ạ 4. H th ng có th kill activity trong tr ng thái này.ệ ố ể ạ
  • 27. 27 3. Android – Application's Life Cycle Life Cycle Methods 27 Method: onDestroy() 1. Đ c g i tr c khi activity b h y.ượ ọ ướ ị ủ 2. Đây là l i g i hàm cu i cùng mà activity nh n đ c.ờ ọ ố ậ ượ 3. Nó có th đ c g i vì activity đang k t thúc (hàmể ượ ọ ế finish() c aủ activity đ c g i), ho c vì h th ng đang t m th i h y th cượ ọ ặ ệ ố ạ ờ ủ ự th hi n t i c a activity đ ti t ki m không gian b nh .ể ệ ạ ủ ể ế ệ ộ ớ • Ta có th phân bi t hai tình hu ng trên b ng cách dùngể ệ ố ằ ph ng th cươ ứ isFinishing(). • H th ng có th kill activity trong tr ng thái này.ệ ố ể ạ
  • 28. 28 3. Android – Application's Life Cycle Life Cycle Methods 28 Killable States – các tr ng thái mà h th ng kill đ cạ ệ ố ượ • Activity tr ng thái killable có th b h th ng k t thúcở ạ ể ị ệ ố ế b t cấ ứ lúc nào sau khi ph ng th c tr v mà không th c thi thêmươ ứ ả ề ự m t dòng l nh nào trong mã c a activityộ ệ ủ . • Ba ph ng th cươ ứ onPause(), onStop(), và onDestroy() d n đ nẫ ế tr ng tháiạ killable. • onPause() là ph ng th c duy nh t đ m b o đ c g i tr cươ ứ ấ ả ả ượ ọ ướ khi ti n trình b h y (killed) —ế ị ủ onStop() và onDestroy() có thể không đ c g i.ượ ọ • Do đó, ta nên dùng onPause() đ l u d li u c n gi l i (ch ngể ư ữ ệ ầ ữ ạ ẳ h n các s a đ i c a ng i dùng).ạ ử ổ ủ ườ
  • 29. As an aside… Android Preferences Preference là m t c ch g n nh đ l u tr và đ c các c pộ ơ ế ọ ẹ ể ư ữ ọ ặ key-value thu cộ các ki u d li u c b n. Nó th ng đ c dùng đ l u các preferenceể ữ ệ ơ ả ườ ượ ể ư c a ng d ng, ch ng h n nh l i chào m ng m c đ nh ho c m t fontủ ứ ụ ẳ ạ ư ờ ừ ặ ị ặ ộ ch c n n p khi ng d ng đ c b t lên.ữ ầ ạ ứ ụ ượ ậ G iọ Context.getSharedPreferences() đ đ c và ghi các giá tr .ể ọ ị Gán tên cho t p preference c a mình n u ta mu n dùng chúng t i cácậ ủ ế ố ạ component khác trong cùng m t ng d ng, ho c dùngộ ứ ụ ặ Activity.getPreferences() không có tên đ dùng riêng cho activityể đang g i.ọ Ta không th chia s preference cho các ng d ng khác (tr khi dùng contentể ẻ ứ ụ ừ provider). 29 3. Android – Application's Life Cycle Life Cycle Methods 29
  • 30. 30 3. Android – Application's Life Cycle Example Life Cycle 30 Example ng d ng sau trình di nỨ ụ ễ m t s tìnhộ ố hu ng chuy nố ể tr ng tháiạ x y ra trong m t chuả ộ trình s ng c aố ủ m t activity đi nộ ể hình. LAYOUT <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/myScreen" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ff000000" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <EditText android:id="@+id/txtColorSelect" android:hint="Background color (red, green, blue)" android:layout_width="wrap_content" android:layout_height="wrap_content"> </EditText> <TextView android:id="@+id/txtToDo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#00000000"> <!-- transparent --> </TextView> <Button android:text=" Finish " android:id="@+id/btnFinish" android:layout_width="wrap_content" android:layout_height="wrap_content"> </Button> </LinearLayout>
  • 31. 31 3. Android – Application's Life Cycle Example: Life Cycle 31 Code: Life Cycle Demo. Part 1 package es.demo; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.widget.*; //GOAL: show the following life-cycle events in action //protected void onCreate(Bundle savedInstanceState); //protected void onStart(); //protected void onRestart(); //protected void onResume(); //protected void onPause(); //protected void onStop(); //protected void onDestroy();
  • 32. 3232 3. Android – Application's Life Cycle Example: Life Cycle 32 Code: Life Cycle Demo. Part 2 private LinearLayout myScreen; private TextView txtToDo; private EditText txtColorSelect; private Button btnFinish; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myScreen = (LinearLayout) findViewById(R.id.myScreen); txtToDo = (TextView) findViewById(R.id.txtToDo); String msg = "Instructions: n " + "0. New instance (onCreate, onStart, onResume) n " + "1. Back Arrow (onPause, onStop, onDestroy) n " + "2. Finish (onPause, onStop, onDestroy) n " + "3. Home (onPause, onStop) n " + "4. After 3 > App Tab > re-execute current app n " + " (onRestart, onStart, onResume) n " + "5. Run DDMS > Receive a phone call or SMS n " + " (onRestart, onStart, onResume) n " + "6. Enter some data - repeat steps 1-5 n "; txtToDo.setText(msg);
  • 33. 33 Code: Life Cycle Demo. Part 3 txtColorSelect = (EditText) findViewById(R.id.txtColorSelect); // you may want to skip discussing the listener until later txtColorSelect.addTextChangedListener(new TextWatcher(){ public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } public void beforeTextChanged(CharSequence s, int start, int count,int after) { // TODO Auto-generated method stub } public void afterTextChanged(Editable s) { changeBackgroundColor(s.toString()); } }); btnFinish = (Button) findViewById(R.id.btnFinish); btnFinish.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { finish(); } }); Toast.makeText(getApplicationContext(), "onCreate", 1).show(); } 33 3. Android – Application's Life Cycle Example: Life Cycle 33
  • 34. 3434 3. Android – Application's Life Cycle Example: Life Cycle 34 Code: Life Cycle Demo. Part 4 @Override protected void onPause() { super.onPause(); saveDataFromCurrentState(); Toast.makeText(this, "onPause", 1).show(); } @Override protected void onRestart() { super.onRestart(); Toast.makeText(this, "onRestart", 1).show(); } @Override protected void onResume() { super.onResume(); Toast.makeText(this, "onResume", 1).show(); }
  • 35. 3535 3. Android – Application's Life Cycle Example: Life Cycle 35 Code: Life Cycle Demo. Part 5 @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); updateFromSavedState(); Toast.makeText(this, "onStart", 1).show(); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Toast.makeText(this, "onDestroy", 1).show(); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); Toast.makeText(this, "onStop", 1).show(); }
  • 36. 36 36 3. Android – Application's Life Cycle Example: Life Cycle 36 Code: Life Cycle Demo. Part 6 protected void saveDataFromCurrentState() { SharedPreferences myPrefs = getSharedPreferences(MYPREFSID, actMode); SharedPreferences.Editor myEditor = myPrefs.edit(); myEditor.putString("myBkColor", txtColorSelect.getText().toString()); myEditor.commit(); } // saveDataFromCurrentState protected void updateFromSavedState() { SharedPreferences myPrefs = getSharedPreferences(MYPREFSID, actMode); if ((myPrefs != null) && (myPrefs.contains("myBkColor"))) { String theChosenColor = myPrefs.getString("myBkColor",""); txtColorSelect.setText(theChosenColor); changeBackgroundColor(theChosenColor); } } // updateFromSavedState protected void clearMyPreferences() { SharedPreferences myPrefs = getSharedPreferences(MYPREFSID, actMode); SharedPreferences.Editor myEditor = myPrefs.edit(); myEditor.clear(); myEditor.commit(); } // clearMyPreferences
  • 37. 37 3. Android – Application's Life Cycle Example: Life Cycle 37 Code: Life Cycle Demo. Part 7 private static String MYPREFSID; //used in part 6 private static int actMode; //used in part 6 private void changeBackgroundColor (String theChosenColor){ // change background color if (theChosenColor.contains("red")) myScreen.setBackgroundColor(0xffff0000); else if (theChosenColor.contains("green")) myScreen.setBackgroundColor(0xff00ff00); else if (theChosenColor.contains("blue")) myScreen.setBackgroundColor(0xff0000ff); else { //reseting user preferences clearMyPreferences(); myScreen.setBackgroundColor(0xff000000); } }
  • 38. 3838 3. Android – Application's Life Cycle Example: Life Cycle 38 Code: Life Cycle Demo. Part 8 /* protected void onRestoreInstanceState(Bundle savedInstanceState) This method is called after onStart() when the activity is being re-initialized from a previously saved state. The default implementation of this method performs a restore of any view state that had previously been frozen by onSaveInstanceState(Bundle). Ph ng th c này đ c g i sau onStart() khi activity đang đ c kh i t o l i tươ ứ ượ ọ ượ ở ạ ạ ừ tr ng thái đã l u l i tr c đó. Cài đ t m c đ nh c a ph ng th c này khôi ph cạ ư ạ ướ ặ ặ ị ủ ươ ứ ụ tr ng thái view đã đ c l u b i onSaveInstanceState(Bundle).ạ ượ ư ở */ @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Toast.makeText(getBaseContext(), "onRestoreInstanceState ...BUNDLING", Toast.LENGTH_LONG).show(); }
  • 39. 3939 3. Android – Application's Life Cycle Example: Life Cycle 39 Code: Life Cycle Demo. Part 9 /* protected void onSaveInstanceState(Bundle outState) Called to retrieve per-instance state from an activity before being killed so that the state can be restored in onCreate(Bundle) or onRestoreInstanceState(Bundle) (the Bundle populated by this method will be passed to both). This method is called before an activity may be killed so that when it comes back some time in the future it can restore its state. For example, if activity B is launched in front of activity A, and at some point activity A is killed to reclaim resources, activity A will have a chance to save the current state of its user interface via this method so that when the user returns to activity A, the state of the user interface can be restored via: onCreate(Bundle) or onRestoreInstanceState(Bundle). Ph ng th c này đ c g i tr c khi m t activity có th b kill sao cho khi nó quay l i nóươ ứ ượ ọ ướ ộ ể ị ạ có th ph c h i tr ng thái c a mình. Ví d , khi activity A b h th ng kill đ l y tàiể ụ ồ ạ ủ ụ ị ệ ố ể ấ nguyên, A s có c h i l u tr ng thái hi n hành c a giao di n ng i dùng b ng ph ngẽ ơ ộ ư ạ ệ ủ ệ ườ ằ ươ th c này, đ khi ng i dùng quay l i activity A, tr ng thái c a giao di n ng i dùng cóứ ể ườ ạ ạ ủ ệ ườ th đ c khôi ph c qua các ph ng th c onCreate(Bundle) ho cể ượ ụ ươ ứ ặ onRestoreInstanceState(Bundle). (Đ i t ng Bundle mà ph ng th c này xây d ng s đ cố ượ ươ ứ ự ẽ ượ truy n cho c hai ph ng th c khôi ph c đó)ề ả ươ ứ ụ */
  • 40. 4040 3. Android – Application's Life Cycle Example: Life Cycle 40 Code: Life Cycle Demo. Part 10 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Toast.makeText(getBaseContext(), "onSaveInstanceState ...BUNDLING", Toast.LENGTH_LONG).show(); } // onSaveInstanceState }//LifeCycleDemo
  • 41. 4141 3. Android – Application's Life Cycle Example: Life Cycle 41 onCreate… onStart… onResume…
  • 42. 42 3. Android – Application's Life Cycle Example: Life Cycle 42 onPause… onStop… onDestroy… After pressing “Back Arrow”
  • 44. Application’s Life Cycle 44 Appendix L u các thông tin tr ng thái khácư ạ @Override public void onCreate(Bundle savedInstanceState) { ... somevalue = savedInstanceState.getString(SOME_KEY); ... } ... @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(SOME_KEY, "blah blah blah"); }
  • 45. 4545 3. Android – Application's Life Cycle Homework Your turn! EXPERIMENT 1. 1. Vi t m t ng d ng Android. (“PuraVida”) đ th nghi m các vòng đ iế ộ ứ ụ ể ử ệ ờ khác nhau c a ng d ng.ủ ứ ụ 2. Layout t iạ main.xml c n có m t Button (text: “Finish”, id: btnFinish) vàầ ộ m t EditText container (txt: “” , id: txtMsg).ộ 3. Dùng ph ng th c onCreate đ n i button và textbox v i ch ng trình.ươ ứ ể ố ớ ươ Thêm dòng mã sau: Toast.makeText(this, "onCreate", 1).show(); 1. Ph ng th c click ch có m t l nh:ươ ứ ỉ ộ ệ finish(); dùng đ k t thúc ng d ng.ể ế ứ ụ Thêm m t l nh Toast (t ng t nh trên) cho t ng event trong 6 eventộ ệ ươ ự ư ừ còn l i. Đ đ n gi n, hãy dùng menu Source > Override/Implementạ ể ơ ả Methods… c a Eclipseủ 2. T i c a s option, đánh d u các event sau: onStart, onResume, onPause,ạ ử ổ ấ onStop, onDestroy, onRestart (đ ý xem có bao nhiêu ph ng th cể ươ ứ onEvent… t i đó!!!)ạ 6.L u ch ng trình.ư ươ Teaching notes
  • 46. 4646 3. Android – Application's Life Cycle Homework Your turn! EXPERIMENT 1 (cont.) 7. D ch và ch y ng d ng.ị ạ ứ ụ 8. Ghi l i chu i các message hi n th b i các l nh Toast.ạ ỗ ể ị ở ệ 9. Nh n nút FINISH. Quan sát chu i các tr ng thái.ấ ỗ ạ 10. Ch y l i ng d ngạ ạ ứ ụ 11. Nh n nút HOME c a emulator. Chuy n gì x y ra?ấ ủ ệ ả • Click vào launch pad, tìm icon và quay l i ng d ng “PuraVida”. Chu iạ ứ ụ ỗ message nào đ c hi n th ?ượ ể ị • Click phím CALL c a emulator. ng d ng tr ng thái paused hayủ Ứ ụ ở ạ stopped? • Click phím BACK đ quay l i ng d ng.ể ạ ứ ụ 7. Long-tap vào nút HANG-UP. Chuy n gì x y ra?ệ ả Teaching notes
  • 47. 4747 3. Android – Application's Life Cycle Homework Your turn! EXPERIMENT 2 16. Ch y emulator th hai.ạ ứ 1. Th c hi n m t voice-call t i emulator th nh t hi n v n hi n th ngự ệ ộ ớ ứ ấ ệ ẫ ể ị ứ d ng c a b n. Chuy n gì x y ra? (yêu c u đ ng b th i gian th c)ụ ủ ạ ệ ả ầ ồ ộ ờ ự 2. G i m t text-message t i emulator th nh t (yêu c u không đ ng b -ử ộ ớ ứ ấ ầ ồ ộ asynchronous attention request) 16. Vi t m t câu vào EditText box (“these are the best moments of my life….”).ế ộ 17. Ch y l i ng d ng. Chuy n gì x y ra đ i v i dòng text?ạ ạ ứ ụ ệ ả ố ớ Teaching notes
  • 48. 4848 3. Android – Application's Life Cycle Homework Your turn! EXPERIMENT 3 Đ m b o tính b n v ng c a d li u (data persistency).ả ả ề ữ ủ ữ ệ 19. Thêm vào ph ng th cươ ứ onPause đo n sauạ SharedPreferences myFile1 = getSharedPreferences("myFile1", Activity.MODE_PRIVATE); SharedPreferences.Editor myEditor = myFile1.edit(); String temp = txtMsg.getText().toString(); myEditor.putString("mydata", temp); myEditor.commit(); • Thêm vào ph ng th cươ ứ onResume đo n sauạ SharedPreferences myFile = getSharedPreferences("myFile1", Activity.MODE_PRIVATE); if ( (myFile != null) && (myFile.contains("mydata")) ) { String temp = myFile.getString("mydata", "***"); txtMsg.setText(temp); } • Gi thì chuy n gì x y ra v i d li u đã nh p vào text box?ờ ệ ả ớ ữ ệ ậ Teaching notes