boolean sendMessageAtTime(Message msg, long uptimeMillis)
// 이 메소드는 부팅후 경과시간을 사용하여 지정할 수 있습니다
boolean sendMessageDelayed(Message msg, long delayMillis)
//지금 시간으로 경과한 시간으로 지정한다 단위는 둘다 밀리초
러너블도 다음메소드를 이용해서 지연시간을 둘 수 있습니다
boolean postAtTime(Runnable r, long uptimeMillis)
boolean postDelayed(Runnable r, long delayMillis)
일단 이런것을 왜 쓰는 건지 이해하기위해서 다음 예제를 실행해봅시다.
일단은 delayed메시지를 안썼을때입니다.
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.ex94;
import android.app.*;
import android.content.*;
import android.os.*;
import android.view.*;
import android.widget.*;
public class ex94 extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void mOnClick(View v) {
new AlertDialog.Builder(this)
.setTitle("질문")
.setMessage("업로드 하시겠습니까?")
.setPositiveButton("예", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
doUpload();
}
})
.setNegativeButton("아니오", null)
.show();
}
void doUpload() {
for (int i = 0; i < 20; i++) {
try { Thread.sleep(100); } catch (InterruptedException e) {;}
}
Toast.makeText(this, "업로드를 완료했습니다.", 0).show();
}
}
실행해 보신분은 뭔가 이상함을 느낄 것입니다. 왜 예를 눌렀는데 잠시 멈춰있지? 렉걸린거 아냐? 이런 생각도 들겁니다. 그래서 이렇게 시간이 걸리는 것은 쓰레드로 처리를 해야합니다.
다음처럼 해봅시다.
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.ex95;
import android.app.*;
import android.content.*;
import android.os.*;
import android.view.*;
import android.widget.*;
public class ex95 extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void mOnClick(View v) {
new AlertDialog.Builder(this)
.setTitle("질문")
.setMessage("업로드 하시겠습니까?")
.setPositiveButton("예", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
mHandler.sendEmptyMessageDelayed(0,10);
//0.01후에 메시지를 보내기로 하면
//mOnClick이 리턴할 시간을 줄 수있습니다.
//즉 대화상자가 닫힘니다.
}
})
.setNegativeButton("아니오", null)
.show();
}
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 0) {
doUpload();
}
}
};
void doUpload() {
for (int i = 0; i < 20; i++) {
try { Thread.sleep(100); } catch (InterruptedException e) {;}
}
Toast.makeText(this, "업로드를 완료했습니다.", 0).show();
}
}
이번에는 바로 대화상자가 닫히고 잠시 뒤에 토스트메시지가 나오는 것을 알 수 있습니다.
왜 쓰는지 아셨나요?
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 핸들러로 UI처리하고 쓰레드에서 실작업 처리하기 (1) | 2012.08.23 |
---|---|
안드로이드 쓰레드 진행상황 프로그래스바로 보여주기 (0) | 2012.08.22 |
안드로이드 쓰레드로 ANR(Application not response)방지법 (0) | 2012.08.22 |
안드로이드 작업스케쥴링 두번째 postDelayed 메소드를 써보자. (0) | 2012.08.22 |
안드로이드 루퍼(looper)!? 쓰레드와 관포지교 관계 (3) | 2012.08.22 |
안드로이드 쓰레드 4번째 메시지 풀을 이용하는 방법(obtain 메소드) (0) | 2012.08.21 |
안드로이드 쓰레드 3번째 쓰레드를 구현하는 클래스와 메인 클래스를 따로 만들어서 처리해보자 (0) | 2012.08.21 |
안드로이드 쓰레드 구현 2번째 방법 post 메소드를 이용하자. (0) | 2012.08.21 |