Android – Hoạt động (Activities)



Activity biểu diễn một màn hình tương ứng với một giao diện người dùng. Activity trong Android  là một lớp con của lớp ContextThemeWrapper.

Nếu bạn đã từng làm việc với ngôn ngữ C, C++ hoặc Java thì bạn sẽ biết rằng chương trình bắt đầu bằng hàm main(). Hệ thống Android chỉ làm một việc đơn giản là khởi tạo chương trình với một Activity, bắt đầu bằng việc gọi phương thức callback onCreate(). Có một dãy các hàm callback để giúp khởi động một Activity và một dãy các hàm callback khác giúp thực hiện các việc khác trong vòng đời của một Activity. Hãy xem sơ đồ biểu diễn vòng đời của một Activity trong ứng dụng Android:

Android Activity lifecycle

Trong vòng đời của mình, Activity nằm ở một trong các trạng thái sau:

  • Khởi động (Activity Launch)
  • Đang chạy (Activity Running)
  • Ngừng chạy (Activity Shutdown)
  • Bị xóa khỏi bộ nhớ (App process killed)

Sau đây là các hàm callback nằm giữa các trạng thái của Activity. Bạn không cần phải viết lại tất cả các hàm này. Tuy nhiên bạn cần hiểu từng sự kiện và viết lại chúng khi cần thiết.

Callback Description
onCreate() Được gọi khi Activity được khởi tạo lần đầu tiên.
onStart() Được gọi khi Activity hiển thị lên màn hình.
onResume() Được gọi khi người dùng bắt đầu tương tác với ứng dụng.
onPause() Được gọi khi Activity này được cho ngưng hoạt động hoặc Activity khác được khởi động lại (resumed).  Một khi bị ngưng, Activity này không thể nhận tương tác từ người dùng và không thể thực hiện bất cứ lệnh code nào.
onStop() Được gọi khi Activity này không còn được hiển thị trên màn hình nữa.
onDestroy() Được gọi khi Activity này bị triệt tiêu khỏi hệ thống (destroyed).
onRestart() Được gọi khi Activity này được khởi động lại sau khi bị dừng.

Ví dụ

Trong ví dụ này, bạn sẽ thực hiện các bước đơn giản để hiển thị ra vòng đời của một ứng dụng Android. Chúng ta sẽ thực hiện các bước sau để chỉnh sửa code trong Project đã tạo trong bài trước:

Bước Mô tả
1 Dùng Eclipse IDE để tạo một ứng dụng Android mới, đặt tên là HelloWorld, đặt tên package là package com.example.helloworld như hướng dẫn ở ví dụ trong phần Android – Ví dụ Hello World (Hello World Example).
2 Chỉnh sửa tập tin mô tả Activity chính MainActivity.java theo hướng dẫn bên dưới. Phần còn lại không thay đổi.
3 Chạy ứng dụng trên Emulator và xem kết quả trên cửa sổ LogCat.

Sau đây là nội dung của một tập tin Activity chính src/com.example.helloworld/MainActivity.java đã được chỉnh sửa. Tập tin này chứa những phương thức cơ bản trong vòng đời của Activity. Ở đây, phương thức Log.d() được dùng để xuất ra log file:

package com.example.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;

public class MainActivity extends Activity {
   String msg = "Android : ";
   
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Log.d(msg, "The onCreate() event");
   }

   /** Called when the activity is about to become visible. */
   @Override
   protected void onStart() {
      super.onStart();
      Log.d(msg, "The onStart() event");
   }

   /** Called when the activity has become visible. */
   @Override
   protected void onResume() {
      super.onResume();
      Log.d(msg, "The onResume() event");
   }

   /** Called when another activity is taking focus. */
   @Override
   protected void onPause() {
      super.onPause();
      Log.d(msg, "The onPause() event");
   }

   /** Called when the activity is no longer visible. */
   @Override
   protected void onStop() {
      super.onStop();
      Log.d(msg, "The onStop() event");
   }

   /** Called just before the activity is destroyed. */
   @Override
   public void onDestroy() {
      super.onDestroy();
      Log.d(msg, "The onDestroy() event");
   }
}

Dòng code sau đây gọi thành phần giao diện từ tập tin res/layout/activity_main.xml file:

setContentView(R.layout.activity_main);

Một ứng dụng có thể có một hoặc nhiều Activity. Mỗi Activity này bắt buộc phải khai báo trong tập tin AndroidManifest.xml và Activity chính phải được khai báo đi kèm thẻ <intent-filter> có chứa 2 thẻ <action> và <catogory> có thuộc tính android:name là “android.intent.action.MAIN”“android.intent.category.LAUNCHER”.

Hãy xem ví dụ của tập tin manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.helloworld"
   android:versionCode="1"
   android:versionName="1.0" >
   
   <uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="22" />
   
   <application
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >
       
       <activity
          android:name=".MainActivity"
          android:label="@string/title_activity_main" >
          
          <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER"/>
          </intent-filter>
          
       </activity>
       
   </application>
</manifest>

Nếu như không có Activity nào có định nghĩa MAIN action và LAUNCHER category, biểu tượng ứng dụng sẽ không xuất hiện trên màn hình chính.

Bây giờ hãy thử chạy ứng dụng Hello World! vừa chỉnh sửa xong. Để chạy ứng dụng, bấm nút Run eclipse_run.jpg trên thanh công cụ. Eclipse sẽ cài đặt ứng dụng lên AVD và khởi động nó. Ứng dụng sẽ hiển thị lên Emulator và bạn sẽ thấy các thông báo log messages trong cửa sổ LogCat in Eclipse IDE:

07-19 15:00:43.405: D/Android :(866): The onCreate() event
07-19 15:00:43.405: D/Android :(866): The onStart() event
07-19 15:00:43.415: D/Android :(866): The onResume() event

android_logcat_window

Bây giờ hãy bấm nút đỏ android_red_button.jpg trên Android Emulator, trên màn hình LogCat trong Eclipse IDE in ra 2 dòng sau:

07-19 15:01:10.995: D/Android :(866): The onPause() event
07-19 15:01:12.705: D/Android :(866): The onStop() event

Kế đến thử nút Menu android_menu_button.jpg trên Android Emulator, trên màn hình LogCat trong Eclipse IDE in ra 2 dòng sau:

07-19 15:01:13.995: D/Android :(866): The onStart() event
07-19 15:01:14.705: D/Android :(866): The onResume() event

Kế đến thử nút Back android_back_button.jpg trên Android Emulator, trên màn hình LogCat trong Eclipse IDE in ra 2 dòng sau:

07-19 15:33:15.687: D/Android :(992): The onPause() event
07-19 15:33:15.525: D/Android :(992): The onStop() event
07-19 15:33:15.525: D/Android :(992): The onDestroy() event

Những dòng này thể hiện là vòng đời của ứng dụng đã kết thúc.

970 Total Views 2 Views Today