μ€λ λ(Thread)
μ΄λ ν νλ‘κ·Έλ¨μμ, νλ‘μΈμ€ λ΄μμ μ€νλλ νλ¦μ λ¨μλ₯Ό λ§νλ€.
λμ μμ μ μν ν λ¨μ
λ©μΈ μ€λ λ : μ±μ μ€ννλ©΄ νλμ μ€λ λκ° μμλ λ, μ΄μ μ€λ λλ₯Ό κ°λ¦¬ν΄
μ€λ λκ° λμνλ λ°©μμ νμ€ μλ°μ λμΌνμ§λ§, μ°¨μ΄μ μ΄ μλ€λ©΄ μλλ‘μ΄λμμλ λ©λͺ¨λ¦¬ μμ€μ UIμ μ§μ μ κ·Όνμ§ μκΈ° λλ¬Έμ νΈλ€λ¬(Handler)κ° λ°λμ μ¬μ©λμ΄μΌνλ€.
μλνλ©΄, UIλ νμΌκ³Ό κ°μ 리μμ€λ μ¬λ¬ κ°μ μ€λ λκ° λμμ μ κ·Όνμ λ μμ€ν μμ μ΄λ€ κ²μ λ¨Όμ μ²λ¦¬ν΄μΌ νλμ§ λͺ¨λ₯΄λ λ¬Έμ κ° λ°μν μ μκΈ° λλ¬Έμ΄λ€.
νΈλ€λ¬(Handler)
λ©μμ§ νλ₯Ό μ΄μ©ν΄ λ©μΈ μ€λ λμμ μ²λ¦¬ν λ©μμ§ μ λ¬
νΉμ λ©μμ§κ° λ―Έλμ μ΄λ€ μμ μμ μ€νλλλ‘ μ€μΌμ€λ§ κ°λ₯
obtainMessage()
νΈμΆμ κ²°κ³Όλ‘ λ©μμ§ κ°μ²΄λ₯Ό 리ν΄λ°κ² νλ€
sendMessage()
λ©μμ§νμ λ£λλ€
handleMessage()
λ©μλμ μ μλ κΈ°λ₯μ΄ μνλλ€
μ½λκ° μνλλ μμΉλ μλ‘ λ§λ μ€λ λκ° μλ λ©μΈ μ€λ λ
κΈ°λ³Έ μ€λ λ μ¬μ©νκΈ°
λ°±κ·ΈλΌμ΄λμμ valueκ°μ μ¦κ°μμΌ λ²νΌ2λ₯Ό μ¬μ©ν΄ κ°μ νμΈνλ€.
λ¨μ : λ²νΌ 2λ₯Ό λλ¬μΌλ§ μμ ν κ²μ νλ©΄μΌλ‘ νμΈκ°λ₯
package com.example.thread;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentProviderClient;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView textView;
int value = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
Button button = findViewById(R.id.button);
button.setOnClickListener(new TextView.OnClickListener() {
@Override
public void onClick(View v) {
BackgroundThread thread = new BackgroundThread();
thread.start();
}
});
Button button2 = findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText("νμ¬ κ° : " + value);
}
});
}
//μ€λ λ ꡬνν κ°μ²΄
class BackgroundThread extends Thread {
boolean running = false;
public void run() {
running = true;
//1μ΄λ§λ€ 벨λ₯κ° 1μ© μ¦κ°μν€λ μ€λ λμ
while ((running)) {
value += 1;
//textView.setText("νμ¬ κ° : " + value);
//λ§μ½μ μ¬κΈ°μ button2κ°μ ν
μ€νΈUI κ°μ λ°κΏμ£Όλ κ±Έ νλ€λ©΄ μλ¬κ° λ°μ
//μλνλ©΄ λ©μΈ μ€λ λκ° μ¬μ©λμ΄μΌ νκΈ° λλ¬Έμ!
//λ©μΈμ‘ν°λΉν°λ λ©μΈμ€λ λκ° μ΄λ―Έ μ μ νκ³ μκΈ° λλ¬Έμ λ€λ₯Έ μ€λ λμμ μ κ·Όμ νλ©΄ λ°λλ½μ΄ κ±Έλ € μλ¬κ°μκΉ
try {
Thread.sleep(1000);
} catch (Exception e) { }
}
}
}
}
νΈλ€λ¬ μ¬μ©νκΈ°
κΈ°λ³Έμ μΈ νΈλ€λ¬ μ¬μ©μ μ΄μ©νμ¬ νμΈλ²νΌμ μ¬μ©νμ§ μκ³ , μ€λ λμμ λμ μΌλ‘ UIμ μ κ·Όν μ μκ² νμλ€.
package com.example.thread;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentProviderClient;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView textView;
//int value = 0;
ValueHandler handler = new ValueHandler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
//첫λ²μ§Έ λ²νΌ : μ€λ λλ₯Ό λ§λ€μ΄μ μ€ν
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BackgroundThread thread = new BackgroundThread();
thread.start();
}
});
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// textView.setText("νμ¬ κ° :" + value);
}
});
}
//thread.startμμ μ€ννΈκ° λ¨Όμ μ€νλλ κ²μ΄ μλλΌ, run λ©μλκ° μ€ν
class BackgroundThread extends Thread{
int value = 0;
boolean running = false;
public void run() {
running = true;
while(running){
value += 1; //1μ΄λ§λ€ 1μ© μ¦κ°
//textView.setText("νμ¬ κ°:" + value);
//μλ¬λ°μ:λ©μΈμ€λ λλ§ μ κ·Όκ°λ₯
Message message = handler.obtainMessage();
Bundle bundle = new Bundle();
bundle.putInt("value",value);
message.setData(bundle);
handler.sendMessage(message);
try{
Thread.sleep(1000);
}catch(Exception e){}
}
}
}
//μ€λ λμμ λ©μμ§λ₯Ό 보λ΄λ©΄ νΈλ€λ¬μμ λ°λλ€.
class ValueHandler extends Handler {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
//UI μ§μ μ κ·Όκ°λ₯
Bundle bundle = msg.getData();
int value = bundle.getInt("value");
textView.setText("νμ¬ κ°:" + value);
}
}
}
νΈλ€λ¬&post μ΄μ©
μ€λ λ ν΄λμ€ μ μ => μ€λ λ μμ runnableκ°μ²΄λ₯Ό λ£λ κ²
ν΄λμ€ μλΆλΆμ Handler handler2 = new Handler(); λ‘ μλ‘μ΄ νΈλ€λ¬λ₯Ό μ μν΄μ€λ€.
postλ©μλλ₯Ό μ¬μ©νμ¬ μμ μ½λλ³΄λ€ λ κ°νΈνκ² μ€λ λ μμμ UI μ κ·Όμ΄ κ°λ₯νκ² νμλ€.
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//BackgroundThread thread = new BackgroundThread();
//thread.start();
//μ€λ λλ₯Ό runnableκ°μ²΄λ₯Ό implementνλ κ²
int value = 0;
boolean running = false;
new Thread(new Runnable() {
@Override
public void run() {
running = true;
while(running){
value += 1;
handler2.post(new Runnable() {
@Override
public void run() {
textView.setText("νμ¬ κ° : "+value);
//νΈλ€λ¬ μμμ μ€ν
}
});
try{
Thread.sleep(1000);
}catch(Exception e){}
}
}).start();
}
});
'APP > ANDROID' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λΆμ€νΈμ½μ€] SQLμ μ΄μ©ν λ°μ΄ν°λ² μ΄μ€ νμ© μμ (0) | 2020.03.11 |
---|---|
[λΆμ€νΈμ½μ€] λ€νΈμνΉ/HTTP (0) | 2020.03.05 |
[λΆμ€νΈμ½μ€]μλλ‘μ΄λ ν(Tab) (0) | 2020.02.28 |
[λΆμ€νΈμ½μ€]μλλ‘μ΄λ νλκ·Έλ¨ΌνΈ(fragment),μ‘μ λ° (0) | 2020.02.27 |
[λΆμ€νΈμ½μ€] λΈλ‘λμΊμ€νΈ μμ μ/μν κΆν (0) | 2020.02.21 |