본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] LockScreen 과 Activity 생명주기에 대한 관계

by 돼지왕 왕돼지 2012. 10. 26.
반응형



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 )



반응형

댓글