Giới thiệu
Trong nhiều trường hợp, chúng ta cần cập nhật giao diện người dùng sau một khoảng thời gian nhất định. Ví dụ này minh họa cách tạo độ trễ (delay) trong Android bằng Handler.
Bước 1: Tạo dự án mới
Android Studio → File → New Project → Hoàn tất thiết lập.
Bước 2: Giao diện (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:id="@+id/parent"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/textChanger"
android:layout_margin="20dp"
android:textAlignment="center"
android:text="Văn bản ban đầu"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
TextView ban đầu hiển thị "Văn bản ban đầu", sau độ trễ sẽ cập nhật thành văn bản mới.
Bước 3: Logic độ trễ (src/MainActivity.java)
package com.example.andy.myapplication;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
int view = R.layout.activity_main;
TextView textChanger;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(view);
textChanger = findViewById(R.id.textChanger);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
textChanger.setText("Sau độ trễ, văn bản đã thay đổi");
}
}, 5000); // 5000ms = 5 giây
}
}
Giải thích mã quan trọng
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
textChanger.setText("Sau độ trễ, văn bản đã thay đổi");
}
}, 5000);
Handler: Cho phép gửi và xử lý các Message/Runnable trên luồng chính (UI thread)postDelayed(Runnable, long delayMillis): Thực thi Runnable sau khoảng thời gian delayMillis (tính bằng milliseconds)5000: Độ trễ 5 giây
Lưu ý quan trọng: Từ API 30 (Android 11),
Handler() constructor không tham số đã bị deprecated. Nên sử dụng new Handler(Looper.getMainLooper()) để rõ ràng hơn.
Chạy ứng dụng
Chạy app trên thiết bị thực. Ban đầu TextView hiển thị "Văn bản ban đầu". Sau 5 giây, văn bản tự động thay thành "Sau độ trễ, văn bản đã thay đổi".