핸들러를 이용한 스레드 구현 (1): http://qlyh8.tistory.com/83?category=726548
앞서 말한 방법으로는, 뷰에 접근할 때마다 새로운 핸들러를 정의하고 handleMessage() 에서 UI 접근 코드를 만들어야 하며
데이터를 메시지 객체로 만들어서 전달해야 하기 때문에 복잡하다.
이를 개선하기 위한 핸들러의 좀 더 쉬운 이용 방법이 있다.
1. MainActivity.java
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | package com.tistory.qlyh8.pracitice; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { TextView textView; Button button; Handler handler = new Handler(); // 핸들러 일반 객체를 사용한다. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.text_view); button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Runnable 객체를 구현하여 스레드 생성 new Thread(new Runnable() { boolean isRunning = false; int value = 0; @Override public void run() { isRunning = true; while(isRunning){ value += 1; // post() 메소드를 호출하여 Runnable 객체를 전달한다. // postAtTime(): 지정된 시간에 실행하는 메서드 // postDelayed(): 지정된 시간만큼 딜레이 된 후 실행하는 메서드 handler.post(new Runnable() { @Override public void run() { // value 객체가 핸들러로 전달된다. // 핸들러 내부에서 실행되기 때문에, 이는 곧 // 메인 스레드에서 실행되기 때문에 UI 접근이 가능하다. textView.setText("현재 값 : "+ value); } }); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); // 스레드 실행 } }); } } | cs |
2. 참고
- Communicating with the UI Thread
- 안드로이드 백그라운드 잘 다루기 Thread, Looper, Handler
출처: https://www.edwith.org/boostcourse-android/lecture/17086
'Android' 카테고리의 다른 글
소켓 (Socket) - 1. 소켓이란 (0) | 2018.07.25 |
---|---|
AsyncTask (0) | 2018.07.25 |
스레드 (Thread) - 2. 핸들러를 이용한 스레드 구현 (1) (0) | 2018.07.24 |
스레드 (Thread) - 1. 스레드와 핸들러 (0) | 2018.07.24 |
Context (컨텍스트) (0) | 2018.07.20 |