2012-02-25 1 views
0

Android 개발자 사이트에서 다음과 같이 말했습니다. UIThread에서 장시간 작동하지 않아야합니다. 대신 다른 스레드에서이 작업을 수행해야합니다. 이 사이트에서, 그들은 여전히 ​​말 : UI 스레드가 몇 초 이상 (약 5 초 현재) 사용자가 악명 높은 "응용 프로그램이 응답하지 않습니다"로 제시된다 (ANR) 대화에 대한 차단Android 앱 : UIThread 차단 후 5 초가 지나면 '응용 프로그램이 응답하지 않습니다'가 표시됩니다.

경우 .

이 진술을 테스트하기 위해 필자는 증거를 제시합니다. 보시다시피

package com.app; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class Example extends Activity{ 
    TextView textView; 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     textView = new TextView(this); 
     textView.setText("please wait"); 
     setContentView(textView); 

    } 

    @Override 
    public void onResume(){ 
     super.onResume(); 
     try { 
      Thread.sleep(8000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     textView.setText("end waiting !!!"); 
    } 

} 

, 나는 현재 스레드 (UIThread를) 만들 팔초 잠 : 여기 내 코드입니다. 따라서이 앱을 실행하면 안드로이드는 "애플리케이션이 응답하지 않음"을 알게 될 것이라고 생각합니다. 그러나 나는 어떤 오류도 보지 못했다. 프로그램이 원활하게 실행됩니다 (텍스트 "end waiting"도 표시됨).

내 코드에 대해 누가 설명 할 수 있습니까? 내가 뭘 잘못했는지 부탁해. 제발.

감사합니다 :)

답변

1

@hqt, 당신이 원하는 경우 프로그램이 종료

희망 할 때 button에서 8 초 - 실행 중이면 버튼을 다시 클릭해야하며 "마법"은 원하는대로 발생합니다.

8

문제는 여기에 당신이 차단됩니다 어떤 신호/이벤트를 생성하지 않는다는 것입니다. Android는 사용자 또는 시스템이이 5 초 내에 이벤트에 응답하지 않을 때 해당 대화 상자를 표시합니다. 어떤 이벤트도 대화를 의미하지 않습니다.

그래서 뭔가를 시도 할 때까지 코드가 잘 돌아갑니다. 아무 것도하지 않고 코드를 실행하면 문제없이 작동합니다. 시작시 메뉴 키를 눌러 이벤트를 생성하면 키 이벤트를 제대로 처리 할 수 ​​없으므로 ANR이 트리거됩니다. 당신이 당신의 button을 클릭하면 도움말 : (내가 코멘트를 게시 할 수 없습니다 죄송) 귀하의 하위 문제

+0

OP가 5 초 이상 UI 스레드를 차단하는 작업을 수행하려는 경우 이상적으로 AsyncTask에 들어가야합니다. – Knossos

+2

@alextsc 자세한 예를 들어 주시겠습니까? 나는 새로운'button '을 만들고 그것을'onRefresh' 이벤트로 만듭니다. 그 후, 내가 앱을 시작할 때, 나는 그 '버튼'을 누르지 만, 아무런 문제가 발생하지 않았다. 여기에 새로 고침에 대한 내 코드 : – hqt

+2

공공 무효 onRefresh (보기보기) { \t \t 시도 { \t \t \t에 Thread.sleep (8000); \t \t} 캐치 (예외 : InterruptedException 전자) {} \t \t \t \t textView.setText ("대기 끝!"); \t \t \t} – hqt

관련 문제