Android Activity가 현재 실행되고 있는지 체크하는 방법
조회수 16697회
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List proInfos = activityManager.getRunningAppProcesses();
for (int i = 0; i < proInfos.size(); i++) { if (proInfos.get(i).processName.equals(pakageName)) { Log.d(TAG, "Running : " + proInfos.get(i).processName); }
}
와 같은 방법을 찾긴했는데 process check하는 방법인 것 같아서 앱에 서비스가 작동하고 있어서 그런지 Activity를 종료해도 로그가 찍히네요.
Activity를 시작하고 종료할때 static변수 값을 true/false로 바꿔서 그 변수로 check하는 방법도 찾긴했는데 무엇이 좋은지 모르겠습니다. (Activity가 여러개라서모든 Activity에 대해서 check하는 것도 좀 그렇고...)
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
Activity가 실행 중(=Foreground 상태)인 것을 확인하고 싶다면 텔레그램의 ForegroundDetector 클래스를 참고해보세요. 원리는 Application.ActivityLifecycleCallbacks을 이용해서 Activity의 onStart() / onStop()이 호출 될 때 레퍼런스 카운트로 Activity가 Foreground인지 Background인지를 알아내는 방식입니다. (참고로 Activity가 여러개 존재해도 동작합니다.)
가령 GPS 이벤트를 1초마다 주기적으로 받는 앱이 있다고 예를 들어봅시다. 배터리 소모를 방지하기 위해 앱이 Background로 내려갔을 때는 GPS 이벤트를 수신을 중단하고, 다시 Foreground로 올라왔을 때 이벤트를 수신하고 싶다면 FogregroundDectector로 쉽게 해결할 수 있습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
위에 작성하신 코드는 현재 Process가 활성화 되어 있는지를 확인할 수 있는 코드입니다.
그렇기에 앱이 홈으로 간다고해서 Process가 죽은것은 아닙니다.
Activity가 내려갔는지 확인하시려면 다음을 추가해주시면 좋을것 같습니다.
processName이 아닌 topActivity 여부 확인하시면 될것 같습니다.
RunningTaskInfo running = info.get(0); ComponentName componentName = running.topActivity; return cls.getName().equals(componentName.getClassName());
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력