안드로이드 개발 질문/답변
(글 수 45,052)
현재 서피스뷰와 스레드를 돌려 이미지 뿌리고있습니다.
어플 실행중 홈버튼을 누르면 어플을 종료하지않고 프로세서상에 남겨놓게되어 홈버튼을 길게누르면 다시 실행했던 어플로 돌아갈수 있잔아요
질문은 여기서 부터입니다. 어플실행중 나갔다 들어오면 화면이 멈춰서 아무것도 작동을 안하고있습니다..
그러다 기다리면 강제종료하겠다는 문구가 나오고있구요..
대충 짐작 해보고있는 쪽은.. Thread가 홈키 누를시 onPause상태에 빠지게되는대 다시 실행하면 쓰레드가... 안돌아서 멈추는거 같기도 해요.. 스레드를 일시정지하는 방법이 있을까요?
아니면 홈키누르고 다시 돌아오면 어플을 처음부터 실행하게 하고싶습니다.
명쾌한 고수님들 답변 요번에도 부탁드리겠습니다.ㅜㅜ
어플 실행중 홈버튼을 누르면 어플을 종료하지않고 프로세서상에 남겨놓게되어 홈버튼을 길게누르면 다시 실행했던 어플로 돌아갈수 있잔아요
질문은 여기서 부터입니다. 어플실행중 나갔다 들어오면 화면이 멈춰서 아무것도 작동을 안하고있습니다..
그러다 기다리면 강제종료하겠다는 문구가 나오고있구요..
대충 짐작 해보고있는 쪽은.. Thread가 홈키 누를시 onPause상태에 빠지게되는대 다시 실행하면 쓰레드가... 안돌아서 멈추는거 같기도 해요.. 스레드를 일시정지하는 방법이 있을까요?
아니면 홈키누르고 다시 돌아오면 어플을 처음부터 실행하게 하고싶습니다.
명쾌한 고수님들 답변 요번에도 부탁드리겠습니다.ㅜㅜ
2010.10.08 13:33:41
홈키 눌렀을때 로그를 찍어보니
01-02 03:07:19.389: DEBUG/[debug](2469): _onSaveInstanceState
01-02 03:07:19.389: DEBUG/[debug](2469): _onPause
01-02 03:07:19.413: DEBUG/[debug](2469): _onWindowFocusChanged
01-02 03:07:19.600: DEBUG/[debug](2469): _surfaceDestroyed
01-02 03:07:19.889: DEBUG/[debug](2469): _onStop
홈버튼 길게 눌러 복귀시엔
01-02 03:08:37.022: DEBUG/[debug](2469): _onStart
01-02 03:08:37.022: DEBUG/[debug](2469): _onResume
01-02 03:08:37.038: DEBUG/[debug](2469): _surfaceCreated
01-02 03:08:37.038: DEBUG/[debug](2469): _surfaceChanged
01-02 03:08:37.569: DEBUG/[debug](2469): _onWindowFocusChanged
요래 찍히는 군요
제가 사용하는 코드입니다.
surfaceDestroyed시에 join으로 스레드를 종료시키고
다시 surfaceCreated 될 때 새로 스래드를 생성해서 실행해줍니다.
01-02 03:07:19.389: DEBUG/[debug](2469): _onSaveInstanceState
01-02 03:07:19.389: DEBUG/[debug](2469): _onPause
01-02 03:07:19.413: DEBUG/[debug](2469): _onWindowFocusChanged
01-02 03:07:19.600: DEBUG/[debug](2469): _surfaceDestroyed
01-02 03:07:19.889: DEBUG/[debug](2469): _onStop
홈버튼 길게 눌러 복귀시엔
01-02 03:08:37.022: DEBUG/[debug](2469): _onStart
01-02 03:08:37.022: DEBUG/[debug](2469): _onResume
01-02 03:08:37.038: DEBUG/[debug](2469): _surfaceCreated
01-02 03:08:37.038: DEBUG/[debug](2469): _surfaceChanged
01-02 03:08:37.569: DEBUG/[debug](2469): _onWindowFocusChanged
요래 찍히는 군요
제가 사용하는 코드입니다.
surfaceDestroyed시에 join으로 스레드를 종료시키고
다시 surfaceCreated 될 때 새로 스래드를 생성해서 실행해줍니다.
@Override public void surfaceDestroyed(SurfaceHolder holder) { if(LOG_FLAG) Log.d("[debug]", "_surfaceDestroyed"); boolean retry = true;
thread.setRunning(false); while (retry) { try { thread.join(); retry = false; } catch (InterruptedException e) { e.printStackTrace(); } } } @Override public void surfaceCreated(SurfaceHolder holder) { if(LOG_FLAG) Log.d("[debug]", "_surfaceCreated"); if(thread.getState() == Thread.State.TERMINATED) { thread = new MingleThread(); thread.setRunning(true); thread.start(); }else{ thread.setRunning(true); thread.start(); } }