안드로이드 개발 질문/답변
(글 수 45,052)
간단한거 어떻게 하면 좋을지 조언 부탁드립니다.
액티비티가 열리는데
A-B-C-D순으로 열립니다.
D액티비티가 열리는 시점에서 A, B, C액티비티를 모두 finish(혹은 스택상에서 모두 제거) 할수 있을까요 ?
정 답이 안나오면 ActivityStartForResult()를 이용하여 줄줄이 닫히게 생각입니다. 더 좋은 방법이 있을까요 ????
2010.11.09 01:51:02
예전에 한번 써봤던 것 같은데요..
C에서 D를 실행시키기 위해서
intent.setFlag(FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
와 같은 형태로 실행하면 이전것 싹 finish 한것이랑 같은 효과일거에요~.
아니면 어떤 상황에서든 적절하게 클래스명.finish() 처리해도 문제없고요.
간단한 test 앱 만들어서 정상동작하는지 log 라도 찍어보고 적용하시면 될것 같네요..
아래 링크 가서 한번 살펴보세요~
http://developer.android.com/reference/android/content/Intent.html#setFlags(int)
2010.11.09 13:27:22
위와 같이 해결이 안된다면,
D 액티비티를 실행시키기 전에
각 액티비티의 인스턴스를 저장해 놓고 해당 액티비티를 종료시키면 될것 같습니다.
클래스 멤버변수(?)로
private static A_Activity a_activity = null; 로 선언해놓고
A_Activity.java 파일의 onCreate() 에서
a_activity = A_Activity.this;
와 같이 구해놓고
이후에 C_Activity 에서 startActivity 를 실행하기 전에 null 인지 체크해서 A_Activity.finish() 해주면 문제 없을것입니다.
null 체크를 위해서는
다음과 같은 getter 만들어 놓고 사용하셔도 될것 같네요.
public static A_Activity getInstance()
{
if ( a_activity != null )
return a_activity;
return null;
}
직접 소스 올리면 좋겠지만, 업무장소에서는 직접 파일 등록이 안됩니다.. (휴.....-_-;;)
ps. 그냥 A_Activity.finish(); B_Activity.finish(); C_Activity.finish(); 해도 될것 같은데요? ...
2010.11.09 14:33:15
해당 사항은 모르겠지만, 편법으로 유사하게 구현할 수 있을 듯 한데요.
A에서 B로 넘어갈 때 A의 instance를 저장해 놓고 A를 finish하고, B와 C도 동일하게 instance 를 저장 후 finish를 시키구요
D로 넘어갈 때는 이전 activity들이 finish가 되었으니깐.. 저장되어 있는 각 activity의 instance들을 지웁니다.
만약 D로 넘어가기 전에 B나 C에서 이전 activity로 넘어가려면 해당 activity를 명시적으로 호출하고 저장된 instance를 기반으로 새로 구성하시면 편법으로 될 것 같긴 한데, 문제는 create 할때 시간적 갭이 생기는 문제가 있을 듯 하네요. 화면 구성상의 시간이 많이 걸리지 않는거라면 편법을 써도 괜찮을 것 같은데, 혹시 방법을 알게 되면 저에게도 공유 부탁드려요
A에서 B로 넘어갈 때 A의 instance를 저장해 놓고 A를 finish하고, B와 C도 동일하게 instance 를 저장 후 finish를 시키구요
D로 넘어갈 때는 이전 activity들이 finish가 되었으니깐.. 저장되어 있는 각 activity의 instance들을 지웁니다.
만약 D로 넘어가기 전에 B나 C에서 이전 activity로 넘어가려면 해당 activity를 명시적으로 호출하고 저장된 instance를 기반으로 새로 구성하시면 편법으로 될 것 같긴 한데, 문제는 create 할때 시간적 갭이 생기는 문제가 있을 듯 하네요. 화면 구성상의 시간이 많이 걸리지 않는거라면 편법을 써도 괜찮을 것 같은데, 혹시 방법을 알게 되면 저에게도 공유 부탁드려요
2010.11.09 17:09:39
이것저것 해봤는데 좀 여의치 않아서 startActivityForResult를 사용했습니다. A에서 B액티비티로 갈때, B에서 C액티비티로 갈때 같은 requestCode를 주고, onActivityResult를 만들어놓았습니다. 그리고 C에서 D액티비티가 갈때 setResult, finish하여 C,B,A순으로 닫히도록 했습니다.
액티비티들의 인스턴스를 저장했다가 종료시키는 방법을 사용할수도 있겠지만, 저는 좀 특이한 상황이라서 이러한 방법을 사용했습니다. FLAG로 해결되었으면 가장 깔끔했을텐데, 아쉽군요 ㅠ



