Android Activity가 현재 실행되고 있는지 체크하는 방법


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하는 것도 좀 그렇고...)

  • 2016년 05월 19일에 작성됨

조회수 2019


2 답변


위에 작성하신 코드는 현재 Process가 활성화 되어 있는지를 확인할 수 있는 코드입니다.

그렇기에 앱이 홈으로 간다고해서 Process가 죽은것은 아닙니다.

Activity가 내려갔는지 확인하시려면 다음을 추가해주시면 좋을것 같습니다.

processName이 아닌 topActivity 여부 확인하시면 될것 같습니다.

RunningTaskInfo running = info.get(0);        
ComponentName componentName = running.topActivity;
return cls.getName().equals(componentName.getClassName());

참고자료



Activity가 실행 중(=Foreground 상태)인 것을 확인하고 싶다면 텔레그램의 ForegroundDetector 클래스를 참고해보세요. 원리는 Application.ActivityLifecycleCallbacks을 이용해서 Activity의 onStart() / onStop()이 호출 될 때 레퍼런스 카운트로 Activity가 Foreground인지 Background인지를 알아내는 방식입니다. (참고로 Activity가 여러개 존재해도 동작합니다.)

https://github.com/DrKLO/Telegram/blob/a7513b3ba1923113840e78799c4c4132cc7f3116/TMessagesProj/src/main/java/org/telegram/ui/Components/ForegroundDetector.java

가령 GPS 이벤트를 1초마다 주기적으로 받는 앱이 있다고 예를 들어봅시다. 배터리 소모를 방지하기 위해 앱이 Background로 내려갔을 때는 GPS 이벤트를 수신을 중단하고, 다시 Foreground로 올라왔을 때 이벤트를 수신하고 싶다면 FogregroundDectector로 쉽게 해결할 수 있습니다.


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close