반응형
LockScreen 과 Activity 생명주기에 대한 관계.
모티브
- Activity 의 onResume, onStart, onRestart 등의 생명주기 함수들에 Dialog 를 띄우는 코드를 넣었다. 해당 Activity 가 떠 있는 상태에서 power 버튼을 눌러 screen off 후, 다시 power 버튼을 눌러 screen on 을 하면 Activity 의 생명주기를 쭉 탄다. 그래서 lock 해제를 안 하고 power button 을 수 차례 눌러 lock screen 을 지속적으로 띄우면 Activity 의 생명주기를 계속 타서 dialog 가 쌓이는 문제를 발견했다.
원인
- LockScreen 은 Activity 가 아니라, 최상단 Window & View 의 개념이다. 그래서 power 버튼이 눌리면 사실 Activity 가 재실행되며 WIndow 가 그 위에 떠 있는 형태이다.
해결
- Activity 가 focus 를 얻었는지를 기준으로 생명주기 안에 있는 함수들을 호출해주어야 한다.
예를 들어..
@Override
public void onStart(){
playSound();
}
@Override
public void onWindowFocusChanged( boolean hasFocus ){
if ( hasFocus )
playSound();
]
- 위의 방법의 문제점은 Dialog 류를 띄우게 되면, Dialog 로 focus가 가게 되고, Dialog 가 dismiss 되면 다시 hasFocus = true 형태로 해당 function 이 recall 이 된다. 이것은 flag 를 이용해서 잘 control 하면 되는데, 이는 당신에게 맡기겠다. ( 정 모르겠으면 댓글 남겨주세요. )
도움이 되셨다면 손가락 꾸욱~ ( 로그인 필요 x )
반응형
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] SimpleDateFormat 사용방법. (0) | 2012.10.26 |
---|---|
[android] 단말 screen width, height 얻어오는 방법. (0) | 2012.10.26 |
[android] MapView Overlay onTab & multitouch zoom in&out conflict 해결법 (0) | 2012.10.26 |
[android] NameValuePair 에 object 전달하는 방법 (0) | 2012.10.26 |
[android] camera의 setPreviewSize 에서 발생하는 java.lang.RuntimeException: setParameters failed (2) | 2012.10.26 |
댓글