총 게시물 1,104건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[TIP&TECH]

현재 사용하고 있는 어플 foreground인지 background 인지 알아내기

글쓴이 : 에찌 날짜 : 2017-04-14 (금) 15:28 조회 : 2308
글주소 : http://www.androidside.com/B56/32983
이 글은 GsBoB 님의 글을 참조하였습니다.
http://gogorchg.tistory.com/entry/Android-App-Foreground-Background

public class MemoryLeakApplication extends Application {

private RefWatcher refWatcher;
private AppStatus mAppStatus = AppStatus.FOREGROUND;

public static RefWatcher getRefWatcher(Context context) {
MemoryLeakApplication application = (MemoryLeakApplication) context.getApplicationContext();
return application.refWatcher;
}


@Override
public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return;
}

registerActivityLifecycleCallbacks(new MyActivityLifecycleCallbacks());
refWatcher = LeakCanary.install(this);
}

public AppStatus getAppStatus() {
return mAppStatus;
}

// check if app is foreground
public boolean isForeground() {
return mAppStatus.ordinal() > AppStatus.BACKGROUND.ordinal();
}

public enum AppStatus {
BACKGROUND, // app is background
RETURNED_TO_FOREGROUND, // app returned to foreground(or first launch)
FOREGROUND // app is foreground
}

public class MyActivityLifecycleCallbacks implements ActivityLifecycleCallbacks {

// running activity count
private int running = 0;

@Override
public void onActivityCreated(Activity activity, Bundle bundle) {

}

@Override
public void onActivityStarted(Activity activity) {
if (++running == 1) {
// running activity is 1,
// app must be returned from background just now (or first launch)
mAppStatus = AppStatus.RETURNED_TO_FOREGROUND;
} else if (running > 1) {
// 2 or more running activities,
// should be foreground already.
mAppStatus = AppStatus.FOREGROUND;
}
}

@Override
public void onActivityResumed(Activity activity) {
}

@Override
public void onActivityPaused(Activity activity) {
}

@Override
public void onActivityStopped(Activity activity) {
if (--running == 0) {
// no active activity
// app goes to background
mAppStatus = AppStatus.BACKGROUND;
}
}

@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}

@Override
public void onActivityDestroyed(Activity activity) {
}
}

}

사용방법

if (getApplication() instanceof MemoryLeakApplication) {
if (((MemoryLeakApplication)getApplication()).isForeground()) {
Logger.d("foregound");

} else {
Logger.d("backgound");
}
} else {
Logger.d("Application Name : " + getApplication() + " , packageName : " + getApplication().getPackageName());
}

메모리릭 체크하는 거도 있어서 보기 불편하실 수도 있으시나 오히려 이것도 같이 사용할 수 있는 하나의 팁이겠죠?
잘 동작하네요
아직 여러가지 테스트를 모두 다 진행한 건 아니지만 구동은 확인했어요 ^^ 도움이 되시길




종합평점 (참여 2명)

추천 버튼을 클릭하면 추천한 자와 추천받은 자 모두에게 포인트가 지급됩니다.

에찌 2017-04-14 (금) 15:53
다른 분들이 올린 것중 이렇게 하셔서 구하시는 분들도 계시네요

public static boolean isForeground(Context context) {

// Get the Activity Manager
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

// Get a list of running tasks, we are only interested in the last one,
// the top most so we give a 1 as parameter so we only get the topmost.
List<ActivityManager.RunningAppProcessInfo> task = manager.getRunningAppProcesses();

// Get the info we need for comparison.
ComponentName componentInfo = task.get(0).importanceReasonComponent;

// Check if it matches our package name.
if(componentInfo.getPackageName().equals(context.getPackageName()))
return true;

// If not then our app is not on the foreground.
return false;
}
아마 현재 실행 중인 프로세스 정보 가져와서 보여주는 것같은데 응용하셔서 사용하면 될 것 같네요 ^^



댓글주소
미싱카 2017-05-08 (월) 19:29
감사합니다.
댓글주소
chan1 2017-07-20 (목) 11:42
잘봤습니다. 감사합니다.
댓글주소
안사드 2017-08-21 (월) 18:10
감사합니다. 
댓글주소
이전글  다음글  목록 글쓰기

총 게시물 1,104건, 최근 0 건 안내 RSS
번호 분류 제목 글쓴이 날짜 추천 조회
1104 강좌  100 Days Google Dev, 3: Google Play Services 7.5 StanleyKou 01-24 0 550
1103 강좌  100 Days Google Dev, 2: The Magic of LRU Cache StanleyKou 01-20 0 577
1102 강좌  100 Days Google Dev, 1: Android Design Support Library 2 StanleyKou 01-18 0 661
1101 TIP&TECH  리스트뷰에서 스위치,체크박스사용시 4 에찌 05-08 5 1970
1100 TIP&TECH  뷰(RecyclerView/...)에 Max Height 주기/[Android] 김병희라고요 04-26 0 1703
1099 TIP&TECH  TabLayout ClickEvent 에찌 04-21 1 1536
1098 TIP&TECH  현재 사용하고 있는 어플 foreground인지 backgroun… 4 에찌 04-14 2 2309
1097 TIP&TECH  안드로이드 Drawble 에 해상도 마다 이미지를 … 1 에찌 04-14 1 1613
1096 TIP&TECH  fragment 에서 ButterKnife 사용 시 resource가져올 때… 1 에찌 04-12 0 1285
1095 TIP&TECH  Youtube 및 facebook 동영상 업로드 할때 1 희망과꿈을 03-28 0 1674
1094 TIP&TECH  google service lib 가져올 때 3 에찌 03-20 3 1728
1093 소스코드  CentralRV 프로젝트 - RecyclerView 가로/세로 가운… 1 김병희라고요 01-30 1 3022
1092 TIP&TECH  번개검색 시스템/[Android] 2 김병희라고요 12-29 2 2297
1091 TIP&TECH  RecyclerView 특정 포지션으로 스크롤 - smoothScroll… 1 김병희라고요 12-12 1 2169
1090 강좌  왕앱따 107. 자바/C++ 파일읽기 속도 비교/[Androi 김병희라고요 11-26 0 2314
1089 강좌  왕앱따 106. C++ 동영상 강좌/[Android] 김병희라고요 11-23 0 2708
1088 소스코드  AOSP용 한글 키보드 입력키 엘카이저 11-17 1 2454
1087 강좌  addDrawerListener, setDrawerListener(deprecated)/[Android] 김병희라고요 11-02 2 2830
1086 강좌  왕앱따 103. 아이콘 반복클릭 테스트/[Android] 김병희라고요 11-01 0 2140
1085 강좌  왕앱따 100. 안드로이드 왕초보의 앱개발 따라… 김병희라고요 10-29 0 2592
 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  다음  맨끝
 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기