버그 해결: 프로젝트 타 임 스 이상 실행 "Looper. prepare () 라 고 부 르 지 않 은 thread 내 에서 handler 를 만 들 수 없습니다." - 노 노 "낙서" 기억
자세 한 내용 은 보 세 요:http://blog.csdn.net/sun_promise
bug: “Can't create handler inside thread that has not called Looper.prepare()”
1. 문제 설명
Android Studio 에서 프로젝트 타임 이상 실행: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
2. 원인 분석
Can't create handler inside thread that has not called Looper.prepare()
하위 스 레 드 thread 에 handler 를 만 들 수 없고 Looper. prepare () 라 는 방법 이 없습니다.
분석: 실제 프로젝트 에 handler 를 만 들 었 습 니 다. 그런데 왜 하위 스 레 드 에 handler 를 만 들 었 습 니까?가장 큰 가능성 은 하위 스 레 드 에서 UI 작업 을 했 고 handler 에 넣 지 않 았 을 수도 있 습 니 다.그래서 운행 중 에 잘못 보고 한 거 야.메 인 스 레 드 는 시간 을 소모 하 는 작업 을 할 수 없고, 하위 스 레 드 에 서 는 UI 변경 작업 을 할 수 없습니다. 하위 스 레 드 는 handler 를 통 해 UI 변경 작업 을 할 수 있 습 니 다.
Note: 이러한 오 류 를 보고 하면 하위 스 레 드 에서 문제 코드 를 찾 습 니 다.일반 개발 도 구 는 어디 가 잘못된 지 알려 준다.세 심하게 하면 돼.
3. 사례 분석:
1) 항목 에서 다음 과 같이 잘못 보고 했다.
04-21 10:16:52.930 17728-18371/com.******.debug E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-1385
Process: com.******.debug, PID: 17728
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.widget.Toast$TN.<init>(Toast.java:338)
at android.widget.Toast.<init>(Toast.java:100)
at android.widget.Toast.makeText(Toast.java:249)
at com.******.app.base.PromptManager.showShortToast(PromptManager.java:173)
at com.******.app.utils.APKVersionUpdate$3.run(APKVersionUpdate.java:193)
2) 오류 신고 와 관련 된 코드:
(주: 문 제 를 설명 하기 위해 서 항목 의 모든 소스 코드 를 붙 이지 않 았 기 때문에 잘못된 위치 부분 만 붙 였 습 니 다)
new Thread() {
@Override
public void run() {
try {
// ,
final File file = getFileFromServer(url, updateProgress);
sleep(2000);
installApk(file);
if(updateProgress.isShowing()){
updateProgress.colseDialog();
}
} catch (Exception e) {
// UI ,
//
PromptManager.showShortToast(TextActivity.this,
" ! ");
//
if(updateProgress.isShowing()){
updateProgress.colseDialog();
}
}
}
}.start();
3) 수정 후의 코드:
하위 스 레 드 에서:
new Thread() {
@Override
public void run() {
try {
// ,
final File file = getFileFromServer(url, updateProgress);
sleep(2000);
installApk(file);
if(updateProgress.isShowing()){
updateProgress.colseDialog();
}
} catch (Exception e) {
handler.sendEmptyMessage(0);
}
}
}.start();
Handler 에서:
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what){
case 0:
// UI
PromptManager.showShortToast(MinxinApplication
.getInstance().getApplicationContext(),
" ! ");
if(updateProgress.isShowing()){
updateProgress.colseDialog();
}
break;
default:break;
}
};
};
---------- 노 노 는 기술 교류 블 로 그 를 배우 고 당신 과 교류 하 기 를 기대 합 니 다! ----------
자세 한 내용 은 보 세 요:http://blog.csdn.net/sun_promise
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception in thread main java.lang. NoClassDefFoundError 오류 해결 방법즉,/home/hadoop/jarfile) 시스템은 Hello World 패키지 아래의class라는 클래스 파일을 실행하고 있다고 오인하여 시스템의 CLASSPATH 아래 (일반적으로 현재 디렉터리를 포함) Hell...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.