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"도 표시됨).
내 코드에 대해 누가 설명 할 수 있습니까? 내가 뭘 잘못했는지 부탁해. 제발.
감사합니다 :)
OP가 5 초 이상 UI 스레드를 차단하는 작업을 수행하려는 경우 이상적으로 AsyncTask에 들어가야합니다. – Knossos
@alextsc 자세한 예를 들어 주시겠습니까? 나는 새로운'button '을 만들고 그것을'onRefresh' 이벤트로 만듭니다. 그 후, 내가 앱을 시작할 때, 나는 그 '버튼'을 누르지 만, 아무런 문제가 발생하지 않았다. 여기에 새로 고침에 대한 내 코드 : – hqt
공공 무효 onRefresh (보기보기) { \t \t 시도 { \t \t \t에 Thread.sleep (8000); \t \t} 캐치 (예외 : InterruptedException 전자) {} \t \t \t \t textView.setText ("대기 끝!"); \t \t \t} – hqt