Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Lưu mảng (Array) vào Singleton với Global Context trong Android

Mục tiêu

Tương tự bài trước nhưng lưu trữ mảng int[] (hoặc bất kỳ mảng nào) trong Singleton, truy cập bằng global context.

Các bước thực hiện

Bước 1: Tạo dự án mới

Android Studio → File → New Project → Empty Activity.

Bước 2: Layout (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="24dp">

    <Button
        android:id="@+id/btnSaveArray"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Lưu mảng vào Singleton" />

</LinearLayout>

Bước 3: SingleTonExample.java (lưu int[])

package com.example.singletonarray;

import android.content.Context;
import java.util.Arrays;

public class SingleTonExample {

    private static final SingleTonExample INSTANCE = new SingleTonExample();
    private Context appContext;
    private int[] storedArray;

    private SingleTonExample() {}

    public static synchronized SingleTonExample getInstance() {
        return INSTANCE;
    }

    public void init(Context context) {
        if (appContext == null) {
            this.appContext = context.getApplicationContext();
        }
    }

    public static Context getGlobalContext() {
        return getInstance().appContext;
    }

    public void storeArray(int[] array) {
        this.storedArray = array != null ? array.clone() : new int[0]; // Defensive copy
    }

    public int[] getArray() {
        return storedArray != null ? storedArray.clone() : new int[0];
    }

    public String getArrayString() {
        return Arrays.toString(storedArray);
    }
}

Bước 4: MainActivity.java

package com.example.singletonarray;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private Button btnSave;
    private SingleTonExample singleton;
    private final int[] sampleArray = {33, 12, 98, 45, 67};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnSave = findViewById(R.id.btnSave);
        singleton = SingleTonExample.getInstance();
        singleton.init(getApplicationContext());

        btnSave.setOnClickListener(v -> {
            singleton.storeArray(sampleArray);
            Toast.makeText(
                SingleTonExample.getGlobalContext(),
                "Mảng đã lưu: " + singleton.getArrayString(),
                Toast.LENGTH_LONG
            ).show();
        });
    }
}

Kết quả

Toast hiển thị: Mảng đã lưu: [33, 12, 98, 45, 67]

Lưu mảng (Array) vào Singleton với Global Context trong Android

Lưu mảng (Array) vào Singleton với Global Context trong Android

Lưu ý quan trọng

  • Defensive copy: array.clone() khi set/get để tránh caller sửa đổi mảng nội bộ
  • Với String[], Object[]: dùng Arrays.copyOf()
  • Với ArrayList: new ArrayList<>(list) để copy
  • Global context cho phép hiển thị Toast từ bất kỳ đâu (không cần Activity context)

So sánh: HashMap vs Array trong Singleton

Đặc điểmHashMapArray
Truy cậpO(1) bằng keyO(1) bằng index
Kích thướcĐộngCố định (khởi tạo)
Phù hợpKey-value, lookup nhanhDanh sách có thứ tự, index cố định
Thread-safeKhông (dùng ConcurrentHashMap)Không (dùng copy hoặc sync)