[배운 것 키워드]
-액티비티 생명주기
-센서 사용하기
-커스텀뷰와 그래픽 API
콜백 메서드 : 특정 타이밍에 호출되는 메서드, onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()
[액티비티의 생명 주기]
액티비티 시작 : 가장 먼저 onCreate() 메서드가 호출 -> 그 다음 onStart() -> 그 다음 onResume()
액티비티 종료 : onPause() -> onStop() -> onDestroy() (메모리에서 해제하는 객체가 있을 경우)
액티비티를 백그라운드에서 대기 : 예) 다른 앱 실행됨 or 홈키 or 전원버튼 : onPause() -> onStop()까지 호출하고 대기하게 된다. 이때 화면을 다시 켜거나 최근 실행 앱에서 다시 실행하게 될 떄, onRestart() -> onStrat() -> onResume() 호출한다.
메모리 부족 등으로 백그라운드 실행 중 강제종료된다면, 앱 재실행시 onCreate() 메서드부터 호출하게 된다.
다음은 그러한 액티비티 생명주기를 간단하게 나타낸 사진이다.
developer.android.com/guide/components/activities/activity-lifecycle
센서 사용 - 안드로이드에서 지원하는 센서가 Sensor 클래스에 정의되어 있다.
기기마다 지원 여부는 당연히 다르지만, 센서의 예를 들면,
가속도 센서, 주변 온도 센서, 중력 센서, 자이로 센서, 조도 센서, 선형 가속도 센서, 자기장, 방향, 기압, 근접, 상대 습도, 회전, 온도 센서 등..
센서 사용 준비
-센서 사용하려면 센서 매니저 서비스 객체가 필요하다. SensorManager 인스턴스를 얻어야 한다. (두번째 점)
+ 센서 API에서 사용하는 좌표 시스템
2. 가속도 센서 사용
3. 가로 모드로 고정
4. 화면이 꺼지지 않게
ㅠㅠ 감동..
아니 그게... 8.4.8까지 학습하고 이제 테스트 해보려고 했는데
실행은 되는데 자꾸 앱이 종료되어서 ㅠㅠ 오늘 오후 6시 40분에 저자 오준석 선생님께 질문 메일을 드렸다ㅜㅜ
그로부터 약 3시간 뒤.. 늦은 시간인데도 명쾌한 답변메일 해주신 오준석 선생님 감사합니다 최고예요..
Todo()코드는 앱을 일단 죽이는 코드라고 한다.
정말 이걸 지우니까 정상적으로 동작이 된다
(오준석 선생님 감사합니다..)
이 글을 읽는 여러분.. 혹시 안드로이드에 입문하고 싶다면 이 책을 완전히 강력 강력 강력추천합니다^,^
그런데 제가 슉슉 공부해나가는 걸 보면 아시겠지만 정말 마음에 쏙 드는 책입니다
커스텀 뷰
이제 마음 편히 커스텀 뷰를 작성할 수 있다. 수평계를 화면에 나타내야 하므로 공부하는 부분이다.
커스텀 뷰를 작성한다 : 없는 뷰를 만드는 것이다. 기본 제공되는 뷰가 아니라.
ㄴView 클래스를 상속받는 새로운 클래스를 생성해야 한다.
그래픽 API들을 사용해 수평계를 나타내기 + 센서와 연동되는 뷰 작성
.
.
.
<총정리>
메인액티비티 / 센서사용준비 |
MainActivity클래스에서 SensorEventListener인터페이스 구현 >>onSensorChanged() : 센서값 변경될때 호출되는 메서드 - >>onAccuracyChanged() : 센서 정밀도 변경될때 호출되는 메서드 - 이번 어플에서 구현하지는 않음. |
MainActivity클래스 내부에 SensorManager객체를 선언하고, onResume()에서 센서의 사용 등록을 한다. -sensorManager.registerListener() --> 액티비티가 동작할 때만 센서 동작하게끔 |
onPause()에서 센서 해제를 한다 -sensorManager.unregisterListener() |
onCreate() -화면 꺼짐 방지 -화면 가로모드 고정 -커스텀뷰(TiltView) 초기화 |
onSensorChanged(event: SensorEvent?) -센서값을 인자로 받는다. -센서값이 변경되면 호출되는 메서드라고 했다. -Log.d(tag,msg)를 통해 로그캣에 센서값(좌표정보)가 표시되도록 해보았다. -커스텀뷰.onSensorEvent(event)를 통해 해당 커스텀뷰에 센서값을 전달 |
*센서 등록, 등록해제 메서드의 인자는 SensorEventListener객체이다. 즉, 그것을 구현하고 있는 MainActivity.
커스텀뷰 -Canvas, Paint같은 그래픽 API를 통해 뷰의 모양을 그릴 수 있다. -View를 상속받는 새로운 클래스를 생성해야 한다. |
그리기 메서드를 사용하려면 Paint객체가 필요하다. private val greenPaint: Paint = Paint()와 같이 페인트 객체를 생성 그리고 Paint객체의 color, style 설정 가능. |
onSizeChanged() -뷰의 크기가 변경될 때 호출된다. -뷰 크가가 결정되면 인자에 좌표가 전달된다. |
onDraw() -인자로 넘어오는 Canvas 객체에 뷰를 그린다. --> Canvas객체의 각종 그리기 메서드 활용. |
onSensorEvent() -아까 메인액티비티에서 onSensorChanged()가 호출될 때, 그 메서드 안에 작성한 커스텀뷰.onSensorEvent() 코드를 통해 해당 커스텀뷰에 센서값을 전달할 수 있다고 했다. 그게 이거다. -메인액티비티의 onSensorChanged()를 통해 넘어온 센서값을 가지고 어떠한 처리를 한다. 이 수평측정기 어플에서는 - 화면 가로 고정 했으므로 좌표조정 및 좌표 확대 (움직임 보려고) - 뷰의 onDraw()메서드를 다시 호출하여 뷰를 다시 그리게 함 --> invalidate() |
와우.. ^^
'JAVA' 카테고리의 다른 글
쓰다 만 전자액자 포스팅 with 감격의 순간 ㅠㅅㅠ (0) | 2021.01.18 |
---|---|
[안드로이드] ViewPager, ViewPager2, RecyclerView, Fragment [작성중] (0) | 2021.01.18 |
[안드로이드] 늦은 초기화 방법 (0) | 2021.01.12 |
안드로이드 - 챕터7, 웹브라우저 (0) | 2021.01.11 |
안드로이드 - 챕터6, 스톱워치 (0) | 2021.01.07 |