2012-02-26 7 views
0

이제 Android 용으로 개발이 시작되었습니다. SurfaceView를 사용하여 간단한 모양을 그리는 응용 프로그램을 만들려고했지만 메뉴 이벤트 (표면이 항상 유효하지 않음)를 기반으로 작동하지 못하게하여 스레드를 구현하기로 결정했습니다. 이제 문제는 길잃은 스레드가 실행되는 것을 막을 수 없다는 것입니다. 디버그 모드에서 응용 프로그램을 시작한 다음 스레드를 시작하는 메뉴 항목을 선택했습니다. 그런 다음 에뮬레이터의 인터페이스에서 뒤로 버튼을 눌러 응용 프로그램에서 빠져 나옵니다. 그러나 스레드의 내 중단 점은 계속 충돌합니다. 그래서 에뮬레이터의 응용 프로그램 목록에서 해당 응용 프로그램을 클릭하여 응용 프로그램으로 돌아가서 스레드를 중지하는 명령을 선택했습니다. 그러나 스레드가 실행 중임을 감지하지 못했습니다. 다른 응용 프로그램 인스턴스와 같습니다.안드로이드 응용 프로그램의 길잃은 스레드

"내 안드로이드 응용 프로그램에서 스레드의 종료를 가장 안정적으로 처리하는 방법은 무엇입니까?"라는 주요 질문에 많은 미묘한 질문이 있습니다.

  1. 원본 인스턴스에 액세스 할 수 있습니까?
  2. 다시 들어가면 원래 인스턴스를 가져야합니까?
  3. 디버거를 시작하는 대신 응용 프로그램 메뉴에서 선택하면 원래 인스턴스 가시성에 영향을 줍니까?
  4. 액티비티/애플리케이션을 종료 할 수 있습니까?해야합니까?
  5. 디버거 (Eclipse)가 전체 장치를 재설정하지 않고 어떻게 든 멈출 수 있습니까?
  6. 메뉴 이벤트 중에 컨텍스트를 잠그려고하지 않고 SurfaceView에 스레드가 필요합니까?

나는 Close application and launch home screen on Android을 보았지만 응용 프로그램을 종료해서는 안되므로 무엇을해야할지 모르겠다.

답변

0

이상한 방법으로 스레드를 사용하려는 것 같습니다. 안드로이드에서 UI 작업을한다면 바닐라 자바 ​​쓰레드를 사용해서는 안됩니다. 대신 AsyncTask를 사용해야합니다. UI가 아닌 스레드에서 UI에 액세스하려고하면 Android 런타임에서 사용자에게 불만을 제기합니다. 대신 처리 스레드와 액티비티 (UI를 실제로 관리하는 곳)간에 메시지를주고 받아야합니다. 이것은 메신저와 핸들러를 사용하여 이루어 지지만 그 과정은 복잡해집니다. 대신 AsyncTask 모델을 사용하면 백그라운드에서 UI를 완벽하게 업데이트하는 작업을 수행 할 수 있습니다. 이는 일반적으로 네트워킹 응용 프로그램과 같이 작업에서 일부 정보를 다운로드 한 다음 그에 따라 UI를 업데이트하는 경우에 일반적으로 사용됩니다. 그래서 몇 가지 AsyncTask 튜토리얼을 읽고 당신이 할 수있는 멋진 것들을 찾아보십시오. (안드로이드에서 스레딩 두통을 다루는 지옥은 대부분이 모델을 사용하여 피할 수 있습니다. 실제로는 죽이기 위해 싸울 필요가 없습니다. 스레드 끄기).

+0

그렇다면 안드로이드 SDK와 함께 제공되는 예제는 나쁘지 않습니까? Lunar Lander 샘플을보고 있는데, SurfaceView가있는 간단한 스레드를 사용합니다. – BlueMonkMN

+0

http://developer.android.com/resources/articles/painless-threading.html 아마도 체크 아웃하려는 것입니다. –

+0

소개 단락에 따르면이 기사는 UI와 상호 작용하는 긴 작업자 스레드를 다루는 반면 ThreadView에 그래픽을 그리는 방법을 알아 내려고했지만 스레드는 사용하지 않는 것으로 생각됩니다. , 그리고 UI 상호 작용을 고려하지 않을 것입니다. 머리카락을 나눠 줘요? – BlueMonkMN

관련 문제