좋은 답변을 통해 많은 지식 알아가고 있습니다 감사합니다.
요 밑 5개정도 글 전에 다른클래스를 사용할때 null pointer가 나는것에 대해 질문한 사람입니다.
내용이 약간 다른질문이므로 새로운 글을 작성하였습니다.
글쓰기전에 구글이나 네이버 블로그한번씩 다 뒤져보는데 잘 모르는것이 너무 많네요.
이번의 질문을 위해 이전 질문에 대한 요약을 살짝하자면
어떠한 센서에대한 사용자의 입력이 몇분간 없으면 동영상을 정지하는것이 목적인 앱으로써
A클래스는 센서, B클래스는 영상에 대한 내용입니다.
시범적으로 약 10초후에 센서값을 측정했을때 입력내용이 없으면 B클래스의 mediaplayer.pause()를 불러오는게
목적이었으며
handler의 postdelayed를 썼습니다.
답변자분들께서 도와주셔서 다른클래스의 정지가 안불러와지는건 mediaplayer를 스태틱으로 정의하여 해결했고
메모리를 무지막지하게 잡아먹는것역시 해결했습니다.
여기서 이번 질문이 있습니다.
센서값은 OnSensorChanged(SensorEvent event)에서 처리합니다.
예시를 좀 들자면
@Override
public void onSensorChanged(SensorEvent event){
switch(event.sensor.getType()){
case Sensor.TYPE_GYROSCOPE:
float g = 자이로센서 계산값;
break;
case Sensor.TYPE_GRAVITY:
....
}
이런식인데요
현재
자이로 센서 구하는곳에 같이 Handler와 Runnable을통해 10초후에
if문을 통해 g 가 0.7이하면 정지, 아니면 실행으로 해놨는데
문제는 Runnable안의 g값역시 10초 이전의 것을 받아온다는 것입니다.
예상컨데 g를 구하는 값이 runnable안에없기때문에 10초 후 실행했을때
이전의 g값을 받는것이 아닐까라고 추측하는데요.
어차피 g값은 OnSensorChanged내부에서 계속 돌아야하기때문에
원래의 g값계산은 냅두고
runnable 안에도 g1 이런식으로 또 계산하게 만들어야하나요?
CountDownTimer나 TimerTask등 시간지연 메소드는 여러가지가 있는것으로 알고있습니다. 이것들도
딜레이 방식이 전부 마찬가진지도 여쭤보고싶습니다.