1. Trang chủ
  2. » Công Nghệ Thông Tin

Android Application’s Life Cycle

48 403 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Android – Application's Life Cycle
Tác giả Frank Ableson, Charlie Collins, Robi Sen
Trường học Android Developers
Thể loại Ghi chú
Năm xuất bản 2009
Định dạng
Số trang 48
Dung lượng 670,94 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

Android Application’s Life Cycle

Notes are based on:

Trang 2

Life Cycle States

Life Cycle Events

Application’s Lifetime: Visible Lifetime Foreground Lifetime

Life Cycle Methods: onCreate(), onStart(), onDestroy()

2

Trang 3

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

Trang 4

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

Trang 5

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

Trang 6

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

Trang 7

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

Trang 8

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

Trang 9

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

Trang 10

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

Trang 11

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

Trang 12

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).

Trang 13

Last Running Activity Activity n-1

.

Running Activity

New Activity started

Back button pushed or running activity closed

Trang 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.

2 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ớ

3 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

15

Life Cycle States

15

Trang 16

Application’s

Life Cycle

Figure 3.

Trang 17

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()

Trang 18

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

Trang 19

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()

Trang 20

Visible Lifetime

20

Visible Lifetime

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

Trang 21

Foreground Lifetime

21

Foreground Lifetime

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

Trang 22

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 đó.

Trang 23

• Đượ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.

Trang 24

3.Tiếp theo bao giờ cùng là onPause().

Trang 25

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

4.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.

5.Activity trong trạng thái này có thể bị hệ thống kill.

Trang 26

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.

Trang 27

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ớ

4.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().

5.Hệ thống có thể kill activity trong trạng thái này.

Trang 28

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)

Trang 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á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

Ta không thể chia sẻ preference cho các ứng dụng khác (trừ khi dùng content

Life Cycle Methods

29

Trang 30

3 Android – Application's Life Cycle

Trang 31

//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();

Trang 32

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 );

+ "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);

Trang 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

btnFinish = (Button) findViewById(R.id.btnFinish );

btnFinish setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {

Trang 34

Example: Life Cycle

Trang 35

protected void onStart() {

// TODO Auto-generated method stub

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();

}

Trang 36

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);

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

Trang 37

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

Trang 38

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 cu)a phương thức này khôi phục

trạng thái view đã được lưu bơ)i onSaveInstanceState(Bundle)

Trang 39

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 cu)a mình Ví dụ, khi activity A bị hệ thôEng kill để) lấEy tài nguyển, A sẽ có cơ hội lưu trạng thái hiện hành cu)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 cu)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) (ĐôEi tượng Bundle mà phương thức này xấy dựng sẽ được truyể@n cho ca) hai phương thức khôi phục đó)

*/

Ngày đăng: 03/10/2013, 01:01

TỪ KHÓA LIÊN QUAN