Trước khi vào ví dụ, cần hiểu mẫu thiết kế Singleton (đơn lẻ). Singleton giới hạn việc khởi tạo một lớp chỉ có một thể hiện (instance). Ứng dụng nổi bật: kiểm soát đồng thời, tạo điểm truy cập trung tâm để ứng dụng truy cập kho dữ liệu.
Ví dụ này minh họa cách sử dụng Singleton Notification trong Android.
Bước 1: Tạo dự án mới
Tạo dự án mới trong Android Studio: File → New Project, điền thông tin cần thiết.
Bước 2: Thiết kế 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"
xmlns:tools = "https://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MainActivity"
android:orientation = "vertical">
<Button
android:id = "@+id/show"
android:text = "Hiển thị thông báo từ Singleton"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
</LinearLayout>
Giao diện chỉ có một nút. Khi nhấn nút Hiển thị, sẽ hiển thị Notification từ lớp Singleton.
Bước 3: Code MainActivity.java
package com.example.andy.myapplication;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button show;
singleTonExample singletonexample;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show = findViewById(R.id.show);
singletonexample = singleTonExample.getInstance();
singletonexample.init(getApplicationContext());
show.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onClick(View v) {
singletonexample.notification(MainActivity.this);
}
});
}
}
Trong code trên, sử dụng singleTonExample làm lớp Singleton. Tạo file singleTonExample.java và thêm code sau:
Bước 4: Code singleTonExample.java
package com.example.andy.myapplication;
import android.app.AlertDialog;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Build;
import android.speech.tts.TextToSpeech;
import android.support.annotation.RequiresApi;
import android.widget.Toast;
public class singleTonExample {
public static final String ANDROID_CHANNEL_ID = "com.example.andy.myapplication";
private static singleTonExample ourInstance = new singleTonExample();
private Context appContext;
private singleTonExample() { }
public static Context get() {
return getInstance().getContext();
}
public static synchronized singleTonExample getInstance() {
return ourInstance;
}
public void init(Context context) {
if (appContext == null) {
this.appContext = context;
}
}
private Context getContext() {
return appContext;
}
@RequiresApi(api = Build.VERSION_CODES.O)
public void notification(final MainActivity mainActivity) {
NotificationManager notif = (NotificationManager) mainActivity.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID,
"Notification Channel", NotificationManager.IMPORTANCE_DEFAULT);
androidChannel.enableLights(true);
androidChannel.enableVibration(true);
androidChannel.setLightColor(Color.GREEN);
androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
notif.createNotificationChannel(androidChannel);
Notification notify = null;
notify = new Notification.Builder(mainActivity, ANDROID_CHANNEL_ID)
.setContentTitle("Thông báo")
.setContentText("Văn bản mẫu")
.setContentTitle("Chủ đề mẫu")
.setSmallIcon(R.mipmap.ic_launcher)
.build();
notif.notify(0, notify);
}
}
Chạy ứng dụng
Kết nối thiết bị, chạy từ Android Studio. Màn hình hiển thị giao diện mặc định.

Nhấn nút Hiển thị, thông báo từ lớp Singleton sẽ xuất hiện như hình dưới:
