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

Kiểm tra ứng dụng Android đang chạy nền (background) hay foreground

Mục tiêu

Xác định app hiện tại ở foreground (người dùng đang xem) hay background (đã minimize).

Cách làm: ActivityManager.RunningAppProcessInfo

Bước 1: Tạo project

Bước 2: Layout activity_main.xml

<LinearLayout ... android:gravity="center" android:background="#33FFFF00" android:orientation="vertical">
    <TextView android:id="@+id/text" android:textSize="18sp" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>

Bước 3: MainActivity.java

public class MainActivity extends AppCompatActivity {
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.text);

        checkAppState();
    }

    private void checkAppState() {
        ActivityManager.RunningAppProcessInfo myProcess = new ActivityManager.RunningAppProcessInfo();
        ActivityManager.getMyMemoryState(myProcess);
        
        boolean isInBackground = myProcess.importance != ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND;
        
        if (isInBackground) {
            Log.d("Tutorialspoint", "App is in background");
        } else {
            textView.setText("Application is in foreground");
        }
    }
}

Giải thích:

  • ActivityManager.getMyMemoryState(myProcess) điền info process hiện tại.
  • myProcess.importance: Mức độ quan trọng. IMPORTANCE_FOREGROUND = đang hiển thị UI cho user.
  • Khác FOREGROUND → background.

Kết quả

App foreground → TextView hiển thị:

Kiểm tra ứng dụng Android đang chạy nền (background) hay foreground

Minimize app → Logcat in "App is in background":

Kiểm tra ứng dụng Android đang chạy nền (background) hay foreground

Cách hiện đại (API 26+): ProcessLifecycleOwner

// Trong Application class
ProcessLifecycleOwner.get().getLifecycle().addObserver(new DefaultLifecycleObserver() {
    @Override public void onStart(LifecycleOwner owner) { Log.d("App", "Foreground"); }
    @Override public void onStop(LifecycleOwner owner) { Log.d("App", "Background"); }
});

Thư viện: androidx.lifecycle:lifecycle-process. Đơn giản, lifecycle-aware, khuyến khích dùng.

Lưu ý

  • Cách ActivityManager cũ có thể không chính xác trên Android 10+ do hạn chế quyền.
  • ProcessLifecycleOwner là tiêu chuẩn hiện nay.