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ị:

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

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.