본문 바로가기
호구지책/Java/Android

[안드로이드] 앱 완전 종료

by 하늘의흐름 2015. 9. 1.
반응형


예전에는


이렇게 처리했는데

요즘에 이게 제대로 동작하지 않는다.

잘 되는 경우도 있고 안되는 경우도 있다.

뭔가 빠진 것 같은데...


Intent intent = new Intent(this,MainActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
intent.putExtra("exit","exit");
startActivity(intent);  
finish();


이렇게 하니 깔끔하게 동작한다.

메인으로 넘어가서 finish(); 해줘도 잔여 스택이 남아있어서

골머리를 앓았는데, 남아있는 스텍도 스스로 finish()처리를 해버리니

깔끔하게 정리가 되었다.


참고링크에는 또 다른 방법에 대해서 설명한다.

배열에 엑티비티를 넣어두고 종료시에 finish로 스택을 비워버리는 방식이다.


방식은 다르지만 근본적으로 finish를 이용해 스텍을 비운다는 점에서는

동일하다. 참고링크의 경우 Flag옵션을 사용하지 않아도 된다. (해도 되고.) 


코드를 소개하자면


public class BaseActivity extends Activity {

	 public static ArrayList<Activity> actList = new ArrayList<Activity>();
	 
	 public void currentTask(){
		 int size = actList.size();
		 for(int i = 0; i < size; i++){
			 DevLog.d("currentTask", actList.get(i).getLocalClassName());
	 	}
	 }
	 
	 public void clearTask(){
		 int size = actList.size();
		 for(int i = 0; i < size; i++){
			 actList.get(i).finish(); 
	 	}
		 DevLog.d("clearTask","Clear Task!");
	 }
	 
	 
}


이런 형식이다. 메서드는 참고링크에 없다. 자작이다.

종료할 때는 clearTask로 스텍을 비워준 뒤에 마지막 엑티비티도 finish()로 종료하면

된다.

현재스텍이 얼마나 쌓였는가는 currentTask() 로 알 수 있다.

갯수만 알고 싶다면 actList.size() 를 불러오면 될 것이니, 굳이 메서드로 만들지 않았다.




참고링크

http://neoroid.tistory.com/201

반응형

댓글