프로그래밍과 잡담

[안드로이드] Screen Off 이벤트 관련 본문

프로그래밍/안드로이드

[안드로이드] Screen Off 이벤트 관련

크레온 2021. 9. 12. 21:24

화면꺼지는 이벤트를 잡을 려면  아래와 같이 해야한다.

 

val receiver = MyReceiver()

val filter = IntentFilter()
filter.addAction(Intent.ACTION_SCREEN_OFF)	// 화면 꺼짐
filter.addAction(Intent.ACTION_SCREEN_ON)	// 화면 켜짐

registerReceiver(receiver)

 

근데  문제는  이렇게 해서 문제가 없으면 다행인데,  화면이 꺼지고 나면

onPause(),  onStop() 순으로 호출이 되는데 onStop() 후에 onSaveInstanceState () 가 호출되는게 문제라는거지. 

이게 왜 문제냐? 

여기서 저장하는 정보가 특정 크기는 넘어서 버리면 앱이 뻗어버린다는 큰 문제가 있음.

 

그러니 onStop() 일 때, 이게 화면 꺼짐인지 아니면 화면 전환이나 분할 모드일 때 화면 크기 변경인지를 파악해서 처리를 해야한다.

 

파악하는 방법은  위에서 썻듯이  화면이 꺼지면 onPause -> onStop 으로 끝이 난다.

 

하지만 화면전환이나 화면크기 변경같은 경우에는 onPuase -> onStop -> onDestory -> onCreate -> onStart -> onResume 순서로 실행. 

 

그러니 onStop에서 끝나고  아래와 같이 isInteractive 가 false 면 화면 꺼진거다.  

val service = this.getSystemService(Service.POWER_SERVICE) as PowerManager
Log.i(this.javaClass.simpleName, isInteractive : ${service.isInteractive}")

 

아나 개같은거,  이벤트가 먼저 올 줄 알았더니 이거 다 끝나야 이벤트가 호출되더라 

 

이거의 단점은 홈버튼 눌렀을 때에도 비슷한 오류나니까 홈버튼 눌렀을 때도 처리해줘야함. 

 

사용 시 문제점

 1. 이게 간혹  isInteractive 가 true가 나오는 경우가 있음.  이것으로 인해서 에러 발생 할 수 있네. 그래서 난 일단 이거 뺌.  뭐 sdcard에 저장하면 되긴 하겠지만, 내꺼 같은 경우에는 용량이 커서 sdcard에서 다시 불러오는거나 그냥 다시 읽는거나 큰 의미가 없어짐.  

반응형
Comments