Tự học lập trình Android - Bài 2: Activity trong Android

bài trước trong Tự học lập trình Android, chúng ta đã cài đặt được môi trường để lập trình ứng dụng Android, Android Studio và định hướng học các thành phần cơ bản để lập trình ứng dụng Android. Bài viết này sẽ hướng dẫn các bạn tìm hiểu, thực hành về Activity - một trong những thành phần quan trọng và thường được dùng khi lập trình ứng dụng Android.

Activity trong Android

Tìm hiểu và thực hành lập trình, xây dựng Activity trong Android

Tìm hiểu và thực hành lập trình, xây dựng Activity trong Android

Một Activity trong Android là một màn hình giao diện người dùng của ứng dụng Android. Một ứng dụng Android có thể chứa một hoặc nhiều Activity, nghĩa là một hoặc nhiều màn hình giao diện. Ứng dụng Android bắt đầu bằng cách hiển thị Activity chính (Main Activity) và có thể mở thêm nhiều màn hình Activity khác tuỳ theo chức năng của ứng dụng.

Vòng đời của Activity (Activity Life Cycle)

Mọi Activity đều trải qua một vòng đời (life cycle) trong ứng dụng Android. Vòng đời của Activity trong Android được minh họa như hình dưới đây:

Vòng đời của Activity (Activity Life Cycle)

Hoạt động của những sự kiện gọi lại (call backs) trong Activity life cycle được mô tả như hình dưới đây:

STT Callback & Mô tả
1 onCreate() Đây là callback đầu tiên và được gọi khi Activity được tạo lần đầu tiên.
2 onStart() callback này được gọi khi Activity bắt đầu hiển thị cho người dùng.
3 onResume() callback được gọi khi người dùng bắt đầu tương tác với ứng dụng.
4 onPause() Activity bị tạm dừng không nhận được tương tác của người dùng.
5 onStop() callback này được gọi khi Activity không còn hiển thị (Ví dụ khi NSD tắt màn hình điện thoại hoặc chuyển sang Activity khác của ứng dụng)
6 onDestroy() callback này được gọi trước khi Activity bị huỷ bỏ bởi hệ thống.
7 onRestart() callback này được gọi khi Activity khởi động lại sau khi bị dừng.

Ví dụ thực hành chạy Activity trong ứng dụng Android

Ví dụ này sẽ hướng dẫn bạn các bước đơn giản để hiển thị vòng đời Activity trong ứng dụng Android. Các bước thực hiện như sau:

Bước Mô tả
1 Bạn sử dụng Android Studio để tạo một ứng dụng Android mới và đặt tên là HelloWorld theo gói com.example.helloworld
2 Sửa đổi tệp Activity chính MainActivity.java như được giải thích bên dưới. Giữ phần còn lại của các tập tin không thay đổi.
3 Chạy ứng dụng để xem kết quả.

Sau đây là nội dung của tệp Activity chính được sửa đổi src / com.example.helloworld / MainActivity.java. Tập tin này bao gồm các callback vòng đời cơ bản của Activity trong Android. Phương thức Log.d() được sử dụng để tạo thông báo log ra màn hình kết quả (console):

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

Một lớp Activity tải tất cả các thành phần UI bằng cách sử dụng tệp XML có sẵn trong thư mục res / layout của dự án. Câu lệnh sau tải các thành phần UI từ tệp res/layout/activity_main.xml:

setContentView(R.layout.activity_main);

Một ứng dụng có thể có một hoặc nhiều Activity. Mọi Activity bạn xác định cho ứng dụng của mình phải được khai báo trong tệp AndroidManifest.xml và Activity chính cho ứng dụng của bạn phải được khai báo trong manifest với <intent-filter> bao gồm MAIN actionLAUNCHER category như sau:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tutorialspoint7.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Nếu MAIN action hoặc LAUNCHER category không được khai báo cho một trong các Activity của bạn, thì biểu tượng ứng dụng của bạn sẽ không xuất hiện trong danh sách ứng dụng của Màn hình chính (không tìm thấy ứng dụng trên màn hình thiết bị cho dù bạn đã cài đặt nó vì thiếu MAIN actionLAUNCHER category không được khai báo cho Activity nào trong ứng dụng của bạn).

Khi bạn bắt đầu chạy ứng dụng mới này bằng AndroidStudio, trang MainActivity của ứng dụng sẽ được hiển thị lên giao diện máy ảo (hoặc máy thật nếu bạn kết nối thiết bị Android thật với máy tính để chạy ứng dụng). Khi ứng dụng chạy và hiển thị màn hình MainActivity thì tab LogCat trong AndroidStudio sẽ hiển thị log như sau:

08-23 10:32:07.682 4480-4480/com.example.helloworld D/Android :: The onCreate() event
08-23 10:32:07.683 4480-4480/com.example.helloworld D/Android :: The onStart() event
08-23 10:32:07.685 4480-4480/com.example.helloworld D/Android :: The onResume() event
Ví dụ thực hành chạy Activity trong ứng dụng Android

Khi chúng ta bấm vào nút khóa màn hình (tắt màn hình) trên máy ảo Android và nó sẽ tạo ra các thông báo sự kiện sau trong cửa sổ LogCat trong AndroidStudio:

08-23 10:32:53.230 4480-4480/com.example.helloworld D/Android :: The onPause() event
08-23 10:32:53.294 4480-4480/com.example.helloworld D/Android :: The onStop() event

Khi chúng ta bấm vào nút mở khoá màn hình (bật màn hình), nó sẽ tạo ra các thông báo sự kiện sau trong cửa sổ LogCat trong AndroidStudio:

08-23 10:34:41.390 4480-4480/com.example.helloworld D/Android :: The onStart() event
08-23 10:34:41.392 4480-4480/com.example.helloworld D/Android :: The onResume() event

Tiếp theo, chúng ta hãy thử bấm vào nút Quay lại (Back) trên máy ảo Android và nó sẽ tạo ra các thông báo sự kiện sau trong cửa sổ LogCat trong AndroidStudio: các callback sau được gọi lại khi ứng dụng Android được thoát ra và Activity bị huỷ đi.

08-23 10:37:24.806 4480-4480/com.example.helloworld D/Android :: The onPause() event
08-23 10:37:25.668 4480-4480/com.example.helloworld D/Android :: The onStop() event
08-23 10:37:25.669 4480-4480/com.example.helloworld D/Android :: The onDestroy() event

Như vậy, qua ví dụ trên, chúng ta đã chạy được một Activity đơn giản trong ứng dụng Android và quan sát được cách hoạt động vòng đời của Activity đó.

Tổng kết

Như vậy, qua bài này chúng ta đã tìm hiểu được Activity trong Android, thực hành quan sát được cách hoạt động và vòng đời của Activity trong Android. Ngoài nội dung hướng dẫn trên, để làm việc với Activity, các bạn cần tìm hiểu thêm về cách chuyển màn hình Activity trong Android, cách truyền dữ liệu giữa các Activity trong Android, cách kết nối Activity với một số thành phần khác để xây dựng ứng dụng Android ví dụ như View, Fragment, Service, Broadcast Receiver v.v.

Tổng kết về Activity trong ứng dụng Android

Để học và thực hành lập trình Android thành thạo mời bạn tiếp tục theo dõi các bài tiếp theo trong loạt bài viết: Tự học lập trình Android.