- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[안드로이드] 스레드와 핸들러 본문
핸들러...
간단한 예제를 만들며 시작해 보자..
?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:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="50dp"
android:text="Android"
/>
<Button
android:id="@+id/bt_Start"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="시작"
/>
<Button
android:id="@+id/bt_Clear"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="지우기"
/>
</LinearLayout>
MainActivity.java
package com.test.ThreadTest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements View.OnClickListener {
/** Called when the activity is first created. */
TextView tv1;
MyThread1 tr1=new MyThread1();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bt1 = (Button) findViewById(R.id.bt_Start);
Button bt2 = (Button) findViewById(R.id.bt_Clear);
bt1.setOnClickListener(this);
bt2.setOnClickListener(this);
tv1 = (TextView) findViewById(R.id.tv);
}
@Override
public void onClick(View arg0) {//버튼이 클릭 되었을때
if (arg0.getId() == R.id.bt_Start) {//만약 bt_Start버튼이 클릭 되면
tr1.start(); //스레드가 시작 된다.
} else if (arg0.getId() == R.id.bt_Clear) {//만약 bt_Clear이 클릭되면
tv1.setText(" "); //tv1의 문자열을 공백으로 채운다.
}
}
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
tv1.setText(""+msg.what);
};
};
class MyThread1 extends Thread{//스래드 클래스의 정의
@Override
public void run() {//run메소드의 재정의
super.run();
for(int i=0;i<100;i++){
handler.sendEmptyMessage(i);//핸들러에 메시지 보낸다.
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
응용 프로그램등의 프로그램들은 스레드가 반드시 존재 한다.
스레드를 별도로 만들어 주지 않아도 기본적으로 만들어지는 응용 프로그램에는 메인 스레드가 존재 하는데
그 메인 스레드는 안드로이드 에서는 임으로 접근 할수 없다. 메인 스레드 외에 별도의 서브 스레드는 메인 스레드가 관리 하고 있는 메시지 큐에 메시지를 전달 해서 메인 스레드가 이를 처리 하게 해야 접근 할 수 있다..
위의 내용을 보기 쉽게 그림으로 바꾸면 아래와 같다..
(순서가 꼭 이렇게 되어야 한다는건 아닌데 쉽게 표현 하고자 순서도로 표현했다)
android.os.Handler클래스의 메시지 전달 메소드는 아래와 같다..
final boolean |
sendEmptyMessage(int What) |
what값만을 포함하는 메시지를 전달 한다. |
final boolean |
sendEmptyMessageAtTime(int what,long uptimeMillis) |
what값만을 포함하는 메시지를 uptimeMills 시간에 전달한다. |
final boolean |
sendEmptyMessageDelayed(int what, long delatMills) |
what 값만을 포함하는 메시지를delatMills시간 뒤에 전달한다. |
final boolean |
sendMessage(Message msg) |
메시지큐 뒤에 메시지를 추가 한다. |
final boolean |
sendMessageAtFrontofQueue(Message msg) |
메시지큐 앞에 메시지를 추가 한다. |
boolean |
sendMessageAtTime(Message msg, long uptimeMills) |
메시지를 uptimeMills 시간에 전달한다. |
final boolean |
sendMessageDelayed(Message msg, long delayMills) |
메시지를 현재 시간부터 delyedMills시간이 지난 후에 메시지 큐에 추가한다. |
'★─Programing > ☆─Android' 카테고리의 다른 글
[안드로이드] 액티비티 이동간 애니메이션 샘플 코드 (0) | 2012.03.16 |
---|---|
[안드로이드] 안드로이드에서 타이머 구현 하기 (0) | 2012.03.16 |
[안드로이드] Align & Layout & Scroll View / 정렬 & 레이아웃 & 스크롤 뷰 (0) | 2012.03.02 |
[안드로이드] 안드로이드 개발시 필요한 몇가지 TIP (0) | 2012.03.02 |
[안드로이드] MFC 개발자를 위한 안드로이드 애플리케이션 개발 기초 (0) | 2011.11.07 |