สิ่งนี้สามารถบรรลุสิ่งนี้ได้อย่างมีประสิทธิภาพโดยใช้Application.ActivityLifecycleCallbacks
ตัวอย่างเช่นให้ใช้ชื่อคลาสกิจกรรมเป็นProfileActivityช่วยให้ค้นหาได้ว่าอยู่เบื้องหน้าหรือเบื้องหลัง
ก่อนอื่นเราต้องสร้างคลาสแอปพลิเคชันของเราโดยการขยายคลาสแอปพลิเคชัน
ซึ่งดำเนินการ
Application.ActivityLifecycleCallbacks
ให้เป็นคลาส Application ของฉันดังนี้
คลาสแอปพลิเคชัน
public class AppController extends Application implements Application.ActivityLifecycleCallbacks {
private boolean activityInForeground;
@Override
public void onCreate() {
super.onCreate();
//register ActivityLifecycleCallbacks
registerActivityLifecycleCallbacks(this);
}
public static boolean isActivityVisible() {
return activityVisible;
}
public static void activityResumed() {
activityVisible = true;
}
public static void activityPaused() {
activityVisible = false;
}
private static boolean activityVisible;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
//Here you can add all Activity class you need to check whether its on screen or not
activityInForeground = activity instanceof ProfileActivity;
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
public boolean isActivityInForeground() {
return activityInForeground;
}
}
ในคลาสข้างต้นจะมีการแทนที่ methord onActivityResumedของActivityLifecycleCallbacks
@Override
public void onActivityResumed(Activity activity) {
//Here you can add all Activity class you need to check whether its on screen or not
activityInForeground = activity instanceof ProfileActivity;
}
ในกรณีที่สามารถพบอินสแตนซ์กิจกรรมทั้งหมดที่แสดงอยู่บนหน้าจอได้เพียงตรวจสอบว่ากิจกรรมของคุณอยู่บนหน้าจอหรือไม่โดยวิธีการข้างต้น
ลงทะเบียนคลาส Application ของคุณใน manifest.xml
<application
android:name=".AppController" />
ในการตรวจสอบกิจกรรมสภาพอากาศคือเบื้องหน้าหรือพื้นหลังตามวิธีแก้ปัญหาข้างต้นให้เรียกใช้วิธีการต่อไปนี้ในสถานที่ที่คุณต้องตรวจ
AppController applicationControl = (AppController) getApplicationContext();
if(applicationControl.isActivityInForeground()){
Log.d("TAG","Activity is in foreground")
}
else
{
Log.d("TAG","Activity is in background")
}