안드로이드 개발 질문/답변
(글 수 45,052)
프로그램 실행 순서입니다. (A,B,C는 Activity입니다.)
A->B->C-> Home key ->A ->E-> Back Key ->C->Back Key->B->Back key->A
프로그램을 실행하여서 위와 같은 순서로 실행하면 home키를 눌렀을 시에 스택에 Activity가 남아 있는 것 같습니다.
제가 원하는 순서는 A->B->C-> Home key ->A ->E-> Back Key ->A입니다. (수정하였습니다.)
1. home키를 눌렀을 시에 이전에 남았는 Activity를 제거할 수 있는 방법이 있을 까요?
2. Home키를 입력 받을 수 있는 키 이벤트가 존재하나요? (KeyDown,Keyup으로는 안들어 오더군요. )
검색하여서 manifest파일에 finishOnTaskLaunch, cleartaskonlaunch , launchMode라는 속성을 바꾸어 가며
적용하였지만 동작이 잘 되지 않는 군요. 방법을 아시는 분은 알려주시면 감사하겠습니다. ^^
그럼 좋은 하루 되세요~~~
추가 정리 사항,
각 Activity 속성
A Activity.
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
B Activity.
android:launchMode="singleTask"
android:finishOnTaskLaunch="true"
C Activity.
android:launchMode="singleTask"
android:finishOnTaskLaunch="true"
E Activity.
android:launchMode="singleTask"
이외는 name, theme, configChanges 정도 밖에 없습니다.
공지사항을 다 읽었음.
A->B->C-> Home key ->A ->E-> Back Key ->C->Back Key->B->Back key->A
프로그램을 실행하여서 위와 같은 순서로 실행하면 home키를 눌렀을 시에 스택에 Activity가 남아 있는 것 같습니다.
제가 원하는 순서는 A->B->C-> Home key ->A ->E-> Back Key ->A입니다. (수정하였습니다.)
1. home키를 눌렀을 시에 이전에 남았는 Activity를 제거할 수 있는 방법이 있을 까요?
2. Home키를 입력 받을 수 있는 키 이벤트가 존재하나요? (KeyDown,Keyup으로는 안들어 오더군요. )
검색하여서 manifest파일에 finishOnTaskLaunch, cleartaskonlaunch , launchMode라는 속성을 바꾸어 가며
적용하였지만 동작이 잘 되지 않는 군요. 방법을 아시는 분은 알려주시면 감사하겠습니다. ^^
그럼 좋은 하루 되세요~~~
추가 정리 사항,
각 Activity 속성
A Activity.
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
B Activity.
android:launchMode="singleTask"
android:finishOnTaskLaunch="true"
C Activity.
android:launchMode="singleTask"
android:finishOnTaskLaunch="true"
E Activity.
android:launchMode="singleTask"
이외는 name, theme, configChanges 정도 밖에 없습니다.
공지사항을 다 읽었음.
2010.05.31 09:13:18
음.. 우선 아쉽게도 홈키 이벤트를 가로챌 수 있는 방법은 없습니다. (구글에서 어플리케이션 UX 일관성을 위해 Home 키만큼은 막아두었다고 하더군요.)
두번째로, Task 에 남기지 않으시려면 Launcher Activity 속성에 clearTaskOnLauch 값을 설정해 주면 되는게 맞습니다. 근데 잘 작동하지 않는 다니까 좀 이상하네요.
제가 조금 헷갈리는 거는... 원하시는 바가
A->B->C->Home Key->A->E->Back Key->Home Screen 이라고 하셨는데...
Task 의 유지 여부와는 관련없이 A->E->Back Key->A 가 되는게 당연한게 아닌가.. 라는 생각이 듭니다.
만일 E 에서 Back Key 를 눌렀을 때 바로 Home Screen 이 되려면,
A Activity 가 시작된 정보가 Task 에 남아 있어서는 않되며, 실행될 때, FLAG_ACTIVITY_NO_HISTORY 값이 설정되어야 합니다.
2010.05.31 10:48:55
얄리님과 휴우님 정말 빠른 실시간 답변 감사드립니다. ^^
복받으실거에요. ㅎㅎ
A Activity에 clearTaskOnLaunch값과 singleTask값을 설정해주었지만 그래도 Activity가 남아있네요.
B Activity도 singleTask여서 여기에는 finishOnTaskLaunch를 설정해주었습니다.
속성값이 있는 것이 도움받기 편할 듯 합니다.
다시 속성값과 함께 수정하여 올리겠습니다.
아래의 내용은 제가 이해하고 있는 내용인데 맞게 이해한 것 인가요?
clearTaskOnLaunch는 루트 Activity를 제외한 나머지를 제거한다. 단 루트 Activity의 속성에만 해당한다.
finishOnTaskLaunch는 루트 Activity를 포함한 태스크를 제거한다.
복받으실거에요. ㅎㅎ
A Activity에 clearTaskOnLaunch값과 singleTask값을 설정해주었지만 그래도 Activity가 남아있네요.
B Activity도 singleTask여서 여기에는 finishOnTaskLaunch를 설정해주었습니다.
속성값이 있는 것이 도움받기 편할 듯 합니다.
다시 속성값과 함께 수정하여 올리겠습니다.
아래의 내용은 제가 이해하고 있는 내용인데 맞게 이해한 것 인가요?
clearTaskOnLaunch는 루트 Activity를 제외한 나머지를 제거한다. 단 루트 Activity의 속성에만 해당한다.
finishOnTaskLaunch는 루트 Activity를 포함한 태스크를 제거한다.
2010.05.31 11:18:26
(추천:
1 / 0)
clearTaskOnLaunch 속성
task의 root activity에 이 속성을 set하면 task를 나가고 돌아올때 clear된다.
finishOnTaskLaunch
clearTaskOnLaunch와 유사하나 이 속성은 하나의 activity에만 유효하다. root activity를 포함하여 현재 세션인 경우에만 살아있고 task를 떠나면 clear된다
task의 root activity에 이 속성을 set하면 task를 나가고 돌아올때 clear된다.
finishOnTaskLaunch
clearTaskOnLaunch와 유사하나 이 속성은 하나의 activity에만 유효하다. root activity를 포함하여 현재 세션인 경우에만 살아있고 task를 떠나면 clear된다
2010.05.31 12:59:47
도움이 될지 모르겠지만..
저같은 경우에는 singleTask와 clearTasgOnlaunch 속성을 home이 되는 activity에만 지정하여
사용했었습니다..
2010.05.31 19:16:11
yally님 무슨 말씀을 그렇게 하셔요.ㅎㅎ
엄청 많이 많이 도움이 됩니다.
저같은 생초보에게는 꿀같은 단비입니다. ㅋ
우선 singleTask사용하는 Activity를 줄여봐야겠군요.
singleTask로 하면 Task가 하나 더 생겨서 실행되는 Activity가 Root로 가는 것으로 예상이 되네요.
그래서 흠.. 처음에 실행하는 것만 singleTask와 clearTaskOnLaunch속성을 넣어서 해보겠습니다.
잘 조합하면 될 듯 한데... 안되네요. ㅎㅎ
Home키만 처리할 수 있으면 이런 고민 안해도 될텐데요..
아쉽네요. ㅎㅎ 그럼 즐거운 하루 되시고요. 앞으로도 자주 도와 주셔요. ㅋ
또 열심히 해보고 해결한 다음 다시 올리겠습니다. 언젠가는 되겠죠? ㅎㅎ
2010.06.05 16:09:07
HOME키를 가로챌 수는 없지만, HOME키가 눌렸는 지 여부는 확인 할 수 있습니다.
해당 Activity의 startActivity (startActivityForResult..) / finish / startService 등을 override하여
해당 task가 유지되는 case를 제외하고,
onUserInteraction / onUserLeaveHint 등을 override하여
시스템에서 task를 switch하는 case (전화수신등)을 제외하고,
onPause / onStop 에서 HOME키가 눌렸다고 볼 수 있습니다.
__
혜마
android:clearTaskOnLaunch="true"