package com.jjjjj.mythread;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView textView;
//MainHandler handler;
Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
textView = findViewById(R.id.textView);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
BackGroundThread thread = new BackGroundThread();
thread.start();
}
});
handler = new Handler();
}
//inner class
//스레드는 Thread클래스를 상속 받고서 실행 가능하다
class BackGroundThread extends Thread{
int value =0;
public void run()
{
for(int i=0;i<100;++i)
{
try {
Thread.sleep(1000);
}
catch (Exception e)
{
}
value+=1;
Log.d("my thread", "value : " + value);
//textView.setText(value); //여기선 스레드 간섭으로 크래쉬 남
/*
Message message = handler.obtainMessage();
Bundle bundle = new Bundle();
bundle.putInt("value", value);
message.setData(bundle);
handler.sendMessage(message);
*/
//이렇게 하면 Runnable 이 main 스레드로 전달 되면서
// 이 쓰레드가 메인 스레드에서 실행된다
handler.post(new Runnable() {
@Override
public void run() {
textView.setText("" + value );
}
});
}
}
}
//스레드 마다 핸들러를 만들수 있는데 이곳에 정의하면 main thread 에 handler 가 정의 된다
/*
class MainHandler extends Handler {
//handleMessage main thread 에서 동작한다
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
Bundle bundle = msg.getData();
int value = bundle.getInt("value");
textView.setText("" + value );
}
}
*/
}
다음 처럼 숫자가 증가하게 됩니다
반응형
'App' 카테고리의 다른 글
android : AsyncTask (0) | 2022.10.27 |
---|---|
Android : Activity (0) | 2022.10.19 |
Java overriding methods when creating new instance of a class (0) | 2022.10.13 |
(View,ViewGroup) 안드로이드 View와 ViewGroup (0) | 2022.10.12 |