안드로이드(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” 에서 잘 동작한다.