안드로이드(Android)에서 앱의 Activity나 앱 종료를 체크하기 위해서, Activity Stack을 설정한 개수만큼만 유지시켜주는 클래스를 만들었다.
ActivityManager.java
import java.util.concurrent.LinkedBlockingQueue; import android.app.Activity; /** * Activity Manager Class * @author mcsong@gmail.com * */ public class ActivityManager { private static final int max = 13; private static final int size =12; private static LinkedBlockingQueue queue = new LinkedBlockingQueue(max); private static final String CNAME = ActivityManager.class.getSimpleName(); public static void createActivity(Activity activity) { if(activity == null) return; queue.add(activity); if(queue.size() > size) { try { queue.take().finish(); } catch (Exception e) { LogUtil.e(CNAME, LogUtil.TAG, ExceptionUtil.getException(e)); } } } public static boolean isRootActivity(Activity activity) { if(activity == null) return false; try { if(activity == queue.peek()) return true; } catch (Exception e) { LogUtil.e(CNAME, LogUtil.TAG, ExceptionUtil.getException(e)); } return false; } public static void clear() throws InterruptedException { while(queue.size() > 0) { queue.take().finish(); } } }
사용방법 및 효과
– Activity 생성(onCreate 메소드에서)시에 createActivity()를 호출한다. 자연스럽게 size만큼 Activity Stack이 관리가 된다.
– 앱 종료 detect는 isRootActivity()로 확인을 하면 된다.. ture인 경우 각 Activity 클래스에서.. onBackPressed()를 Override해서 확인하면 된다.. 참고로, AbstractActivity 클래스를 만들어서 상속해서 AbstractActivity 클래스에서 이 코드를 삽입하면 각각의 Activity 클래스에서 이 코드를 삽입할 필요가 없다.
– 앱을 종료하면서 clear()를 호출해서 Activity stack에 있는 Activity들을 다 날려주셔야 Activity 관리가 명확해 집니다.. ^^
안드로이드 activity의 동작형태는 android:launchMode=”standard” 에서 잘 동작한다.