일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 스타2
- 윈도우7
- vuejs
- Qt4
- QTcpServer
- 바이크
- 자바
- 잡담
- FFI
- 엑티브엑스
- 이륜차
- Qt 소켓프로그래밍
- 정성하
- android SAF
- 마영전
- 안드로이드
- 알람프로그램
- c언어
- 고속도로
- 스타크래프트2
- 자료구조
- 오토바이
- Qt OpenGL
- HTML
- qt 설치
- 디자이어HD
- QT
- Java
- 양평역
- 재귀함수
- Today
- Total
프로그래밍과 잡담
[안드로이드] Screen Off 이벤트 관련 본문
화면꺼지는 이벤트를 잡을 려면 아래와 같이 해야한다.
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에서 다시 불러오는거나 그냥 다시 읽는거나 큰 의미가 없어짐.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
항상 그렇지만 안드로이드 빌드 툴은 진짜 거지 같아. (0) | 2023.04.30 |
---|---|
[Android] Android Studio 소스 접기 아이콘 색깔 변경하기 (0) | 2021.12.05 |
[안드로이드] DocumentFile 은 느리다. (3) | 2021.08.29 |
[안드로이드] 거지같은 개발툴 (2) | 2021.05.20 |
[안드로이드] 안드로이드가 21년 11월부터는 TARGET API를 30 이상으로 강제한다. (0) | 2021.05.18 |