쓰레드의 활용
ANR이란
응용프로그램이 5초이상 사용자의 입력에 반응하지않을때
브로드캐스트 리시버가 10초내로 리턴하지 않을때
사용자에게 프로그램을 강제로 죽일지 아니면 놔둘지 뜨는 대화상자를 말합니다.
다음 코드는 시간이 오래 걸리는 것을 처리하는 방법입니다.
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="업로드를 시작하려면 다음 버튼을 누르세요."
/>
<Button
android:id="@+id/upload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="mOnClick"
android:text="Upload"
/>
</LinearLayout>
자바파일
package com.android.ex98;
import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
public class ex98 extends Activity {
boolean bUploading = false;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void mOnClick(View v) {
if (bUploading) return;//동일 작업에 대한 재진입을 금지시키기 위해서 썼음
//장시간 걸리는 작업은 쓰레드로 분리한다
Thread uploadThread = new Thread() {
public void run() {
doUpload();//장시간 걸리는 작업 쓰레드 내부에서 토스트메시지를 쓰면 뻗는다
//쓰레드에서는 UI와 관련된 어떠한 동작도 할 수 없다.
mCompleteHandler.sendEmptyMessage(0);//작업이 끝난후 할일은 핸들러로 분리한다
}
};
bUploading = true;
uploadThread.start();
}
public Handler mCompleteHandler = new Handler() {//여기가 핸들러로 처리하는 부분이다
public void handleMessage(Message msg) {
bUploading = false;
Toast.makeText(ex98.this, "업로드를 완료했습니다.", 0).show();
}
};
void doUpload() {
for (int i = 0; i < 100; i++) {
try { Thread.sleep(100); } catch (InterruptedException e) {;}
}
}
}
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[안드로이드] Binary XML file line #13: Error inflating class fragment 해결 방법 (1) | 2013.10.28 |
---|---|
안드로이드 Touch 이벤트 처리하기 (0) | 2013.05.03 |
안드로이드 핸들러로 UI처리하고 쓰레드에서 실작업 처리하기 (1) | 2012.08.23 |
안드로이드 쓰레드 진행상황 프로그래스바로 보여주기 (0) | 2012.08.22 |
안드로이드 작업스케쥴링 두번째 postDelayed 메소드를 써보자. (0) | 2012.08.22 |
안드로이드 작업스케쥴링 sendMessageDelayed를 언제 쓰지 (0) | 2012.08.22 |
안드로이드 루퍼(looper)!? 쓰레드와 관포지교 관계 (3) | 2012.08.22 |
안드로이드 쓰레드 4번째 메시지 풀을 이용하는 방법(obtain 메소드) (0) | 2012.08.21 |