Android

Vòng đời của Activity trong Android (Activity LifeCycle)

Giới thiệu

Khi mới bắt đầu lập trình Android, việc bắt đầu của chúng ta là cố gắng cài đặt thành công bộ IDE (có thể là Elipse, Android Studio) và tạo thử project xem thử trong project có những cái gì tổ chức ra sao. Mặc định khi khởi tạo project chúng ta thấy rằng luôn luôn có một file MainActivity.java được tạo ra. Và ứng với với file .java này lại có một file activity_main.xml

activity-android-ss-0

Vậy hai file đó có ý nghĩa như thế nào. Thì trong bài viết này sẽ cùng các bạn tìm hiểu chi tiết.

Activity trong Android là gì

Activity trong Android được xem là một màn hình tương tác trong ứng dụng Android. Activity chịu trách nhiệm chuyển giao sự kiện cho các view trong nó và quản lý vòng đời (LifeCycle) của nó. Một ứng dụng Android có thể có một hoặc nhiều Activity. Và những Activity này có vòng đời độc lập với nhau và được duy trì trong Activity BackStack.

activity-android-ss-2

 

  • Bạn đang ở Activity 1 và từ Activity này bạn chuyển sang Activity 2. Khi đó Activty 1 sẽ được đẩy xuống dưới stack và Activity 2 nằm trên cùng của Stack.
  • Từ Activity 2 bạn lại chuyển sang Activity 3 thì tiếp tục Activty 2 lại được đẩy xuống, Activity 3 nằm ở trên stack.
  • Ở Activty 3 bạn nhất nút back thì activity 3 được destroy và đẩy ra khỏi stack. Khi đó Activity thứ 2 sẽ được đưa lên top của stack và tương tác với người dùng.

Vòng đời của Activity

Trước tiên chúng ta sẽ cùng nhau tìm hiểu vòng đời của Activity sau đó sẽ đi đến phần thực hành để hiểu rõ hơn.

Dưới dây là Diagram mô tả vòng đời của ứng dụng Android.

activity-android-ss-1

onCreate()

Phương thức callback này được gọi khi ứng dụng mới start, nhưng chưa có thể tương tác với người dùng. Ở trong phương thức này chúng ta thường sử dụng để setContentView(), khởi tạo cái view, inflate view từ xml đăng kí event cho view, khởi tạo Adapter cho ListView, RecyclerView…

onStart()

Phương thức callback này được gọi ngay sau khi onCreate()b được gọi. Ở phương thức này chúng ta vẫn chưa tương tác được với người dùng trên UI.

onResume()

Phương thức này được gọi ngay sau khi onStart() được gọi. Ở phương thức này chúng ta có thể tương tác được với UI.

onPause()

Phương thức callback này được sử dụng khá phổ biến trong vòng đời của Activity. Chúng ta thường lưu lại trạng thái của các biến trong method này.

onStop()

Phương thức callback này có thể được gọi ngay sau khi phương thức onPause được gọi. Phương thức này được gọi khi chúng ta nhấn nút home app.

onRestart()

Phương thức callback này gọi khi activity đã stoped, gọi trước khi bắt đầu start lại Activity.

onDestroy()

Phương thức này đợc gọi khi chúng ta nhấn back từ activity, hoặc call method finish() của activity.

Trên đây chúng ta đi cùng nhau tìm hiểu lý thuyết. Tiếp theo sẽ đi vào phần thực hành để cùng hiểu vòng đời trong Android là cái gì.

Tạo một project ActivityLifeCycle

activity-android-ss-3

Sau đó chọn API sử dụng trong project. Ở đây tôi sử dụng API 15.

activity-android-ss-4

Nhấn next và chon Empty Activity.

Android Studio sẽ tạo cho chúng ta project như sau:

activity-android-ss-5

Trước tiên mình sẽ loge tất cả các method callback ở trên và run thử xem các method trên được chạy như thế nào

Tôi log trong các method trong class MainActivity như sau:

Trường hợp 1: Start lên và nhấn back để thoát app

Khi run app lên sẽ thấy log xuất ra như sau:

Tôi nhấn nút back để thoát app

Trạng thái được chuyển từ onResume -> onPause -> onStop -> onDestroy.

Trường hợp 2: Start app và nhân home app (nút home của thiết bị Android)

Start app:

Và nhấn home app

Vào lại app

Và lại nhấn back để thoát app

Chúng ta thấy rằng activity chuyển từ trạng thái onResume sang onPause và sang onStop khi nhấn home app. Chứ không gọi onDestroy của home app. onDestroy của activity được gọi khi chúng ra nhấn nút back hoặc gọi method finish();

Lưu ý. Nếu app ở dưới trạng thái onStop quá lâu mà hệ điều hành cần cần bộ nhớ để chạy ứng dụng khác. Thì khi người dùng vào lại app sẽ chạy lại từ đầu từ onCreate -> onStart -> onResume

Ví dụ tiếp theo tôi demo đó là xem Lifecycle của Activity khi chuyển từ khác Activity này qua Activity khác.

Tôi tạo thêm một Activity nữa có tên là OtherActivity như sau.

activity-android-ss-6

Nhập tên Activity là OtherActivity sau đó nhấn next để hoàn thành.

Tiếp tục xuất log như ở MainActivity như sau:

activity_main.xml tôi thêm một button để thực hiện chuyển từ MainActivity qua OtherActivity.

Và sửa lại class MainActivity.java như sau

Run app và xem log.

Khi Start app

Khi nhấn Button Go To Other Activity

Ta thấy như sau: MainActivity sẽ vào onPause sau đó OtherActivity start Activity (onCreate – > onStart -> onResume) và sau đó MainActivity mới thực sự vào onStop.

Tiếp thụ nhấn nút back từ OtherActivity

OtherActivity sẽ vào onPause sau đó MainActivity restart lại activity (onRestart -> onStart -> onResume) sau đó OtherActivity mới vào onStop và đến onDestroy Activity.

Nhấn back từ MainActivity

Ngoài ra còn một chế độ trong Developer Options gọi là Don’t Keep Activities mà tôi thấy ít người biết đến.

activity-android-ss-7

Enable chết độ Don’t keep activities lên

activity-adroid-ss-8

và hãy thử làm lại các ví dụ từ đầu bài tới giời. Và nhận thấy rằng cho dùng chúng ta nhấn back activity hay nhấn home app thì activity đó vẫn sẽ gọi onDestroy (từ onResume -> onPause -> onStop -> onDestroy). Khi vào lại app thì sẽ gọi lại onCreate -> onStart -> onResume.

Kết luận

Trên đây tôi đã cùng các bạn đi nghiên cứu vòng đời của ứng dụng Android. Kiến thức này là một kiến thức rất quan trọng nếu bạn muốn chuyên sâu về android cũng như dễ dàng trong quá trình phát triển. Nếu có bất cứ thắc mắc nào, các bạn có thể để lại comment bên dưới để tôi sẵn sàng giải đáp thắc mắc của các bạn.

 

8 thoughts on “Vòng đời của Activity trong Android (Activity LifeCycle)”

  1. mình thấy nhiều người hướng dẫn click chuột phải vào một dòng trống trong activity chọn source->Override/Implement methods. sao mình click chuột phải thì không có những thuộc tính đó

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.