본문 바로가기

Development/Android Studio

(Android Studio) Chapter7. Log 출력, Thread & Handler

1. Debuging

package com.example.debugexample;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

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

        String choi = "Loquens";
        
        Log.e("MainActivity : ", choi);
        // choi의 나이
        int a = 10;
        // 로그를 찍었다. 
        Log.e("MainActivity", String.valueOf(a));
        // 에러가 나는 경우 지정된 문구를 에러에 나타내는 방법, 즉, 조건a에 부합하는, 또는 부합하지 않는 경우 "Error: 404"같은 문구를 출력하게 함
    }
}

 

2. Thread & Handler, Executor

  1) 정의

    - task가 여러개가 있고 이를 처리하기 위해 thread를 한 개 또는 여러개를 생성하여 작업요청을 통해 병렬로 task들을 처리하는 일련의 과정을 thread pood이라고 함

    - thread는 main이 있고 message queue에 handler가 메시지를 전달해서 looper가 처리함, 메시지는 다른 thread에서 메시지를 받아 다시 main으로 메시지를 던지는 역할도 handler가 함. 해당 과정에서 에러 발생 시 sleep을 하게 되는데 이때 설정한 시간주기에 따라 메시지를 던지거나 지정한 작업을 수행함

    - Thread : 백그라운드에서 작업 가능, 반복문을 통해서 단일 또는 스레드 풀을 통해 다중작업을 지정

    - Handler : 과거에는 반복문 안에서 반복되는 테스크를 통해 메시지를 던지거나 runnable을 실행할 수 있음, handler는 메시지나 runnable을 정의하는 메소드 

    - Executor : 현재는 handler를 쓰지 않고 executor를 통해 메시지를 전달하지 않고 바로 runnable을 실행시킴(즉, 메시지 전달기능이 없음).

  2) Thread와 Handler 예시

package com.example.threadexample;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    Button btn_start, btn_stop;
    Thread thread;
    boolean isThread = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 스레드 시작
        btn_start = (Button) findViewById(R.id.btn_start);
        btn_start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                isThread = true;
                thread = new Thread() {
                    public void run() {
                        while(isThread){
                            try {
                                sleep(5000); //예외가 발생할 것 같은 구문의 오류를 감지해서 try/catch 문 안으로 감쌈
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            handler.sendEmptyMessage(0);
                        }
                    }
                };
            }
        });
        // 스레드 종료
        btn_stop = (Button) findViewById(R.id.btn_stop);
        btn_stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                isThread = false;
            }
        });

    }
    // 반복문에서 게속 true이기 때문에 5초마다 false가 될 때까지 handler를 실행하게 되는데 안의 토스트메시지를 출력
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(@NonNull Message msg) {
            Toast.makeText(getApplicationContext(), "Loquens의 앱만들기", Toast.LENGTH_SHORT).show();
        }
    };

}

  3) Executor

    - Thread가 복잡해지면 관리에 어려움이 생겨 이를 해결하기 위해 thread를 만들고 관리하는 작업을 executor에 위임한다.

    - Thread & Handler는 runnable과 일련의 작업(생성, 종료, 없애기 등)을 개발자가 직접 만들고 관리하는데 API executor에서는 runnalbe만 개발자가 직접 만들고 일련의 작업은 executors가 수행한다.

    - Thread 만들기 : 어플리케이션이 사용할 thread pool을 만들어 관리

    - Thread 관리 : 생명주기 관리

    - 작업 처리 및 실행 : Thread로 실행할 작업을 제공할 수 있는 API 제공

    - 주요 인터페이스 : Executor, ExecutorService, ScheduledExecutorService

    - 주요 소스코드 : 구현체 생성 > 작업 제출 > 작업 종료, 즉시 종료

 

3. 참고 사이트

https://veneas.tistory.com/entry/Java-Executors-Thread-%EC%82%AC%EC%9A%A9%EB%B2%95

 

[Java] Executors Thread 사용법

1. 자바 Thread 관리의 어려움 자바로 스레드를 생성할 경우에는 아주 기본적으로는 아래와 같이 Thread 클래스와 Runnable 함수형 인터페이스를 구현해 Thread를 생성합니다. 간단한 소스 같은 경우에

veneas.tistory.com

https://developer.android.com/reference/java/util/concurrent/Executor 

 

Executor  |  Android Developers

 

developer.android.com

https://link2me.tistory.com/1233

 

개념 잡는 Thread(쓰레드) 와 핸들러(Handler)

프로세스(process)는 '실행중인 프로그램'이다. 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)를 할당받아 프로세스가 된다.프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모

link2me.tistory.com