관리 메뉴

Jsecurity

안드로이드 - 스레드와 핸들러 예제실습 본문

카테고리 없음

안드로이드 - 스레드와 핸들러 예제실습

Great king 2019. 11. 18. 23:43

스레드란

- 스레드는 하나의 프로세스 내에서 실행되는 작업의 단위를 말하며, 하나의 운영 체계에서 여러 개의 프로세스가 동시에 실행되는 환경이 멀티태스킹이고, 하나의 프로세스 내에서 다수의 스레드가 동시에 수행되는 것이 멀티스레딩이다.


핸들러란


- 안드로이드에서는 화면UI에 접근하는 것을 막아두고 실행 시 생성되는 메인 스레드를  통해서만 화면 UI를 변경할 수 있기 때문에 핸들러를 통해서 메인 스레드에 접근하여 UI를 수정한다.

- 핸들러는 메시지처리 방식Runable객체 실행방식이 있다.

 


안드로이드 핸들러 (예제)

 


메시지 처리 방식 

public class MainActivity extends AppCompatActivity {
    Button btnStart;
    TextView tvResult;
    int value=0;
    MainHandler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnStart = findViewById(R.id.btnStart);
        tvResult = findViewById(R.id.tvResult);

        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                BackgroundThread thread = new BackgroundThread();
                thread.start();

            }
        });
        handler = new MainHandler();
    }


    class BackgroundThread extends Thread{

        public void run() {
            for (int i=0; i<10; i++){
                try {
                    Thread.sleep(1000);
                }catch (Exception e){}

                value += 1;
                Log.d("Thread", "value: " + value);

                Message message = handler.obtainMessage();
                Bundle bundle = new Bundle();
                bundle.putInt("value",value);
                message.setData(bundle);

                handler.sendMessage(message);

            }

        }
    }

    class MainHandler extends Handler{
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);

            Bundle bundle = msg.getData();
            int value = bundle.getInt("value");
            tvResult.setText("value: "+value);
        }
    }
}

 


Runable 객체  실행방식

public class MainActivity extends AppCompatActivity {
    Button btnStart;
    TextView tvResult;
    int value=0;
    Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnStart = findViewById(R.id.btnStart);
        tvResult = findViewById(R.id.tvResult);

        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                BackgroundThread thread = new BackgroundThread();
                thread.start();
            }
        });

    }

    class BackgroundThread extends Thread{

        public void run() {
            for (int i=0; i<10; i++){
                try {
                    Thread.sleep(1000);
                }catch (Exception e){}

                value += 1;
                Log.d("Thread", "value: " + value);

                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        tvResult.setText("value 값: "+value);
                    }
                });

            }
        }
    }
}
Comments