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
https://developer.android.com/reference/java/util/concurrent/Executor
https://link2me.tistory.com/1233
'Development > Android Studio' 카테고리의 다른 글
(Android Studio) Chapter9. Service(Background Music play) (0) | 2023.03.04 |
---|---|
(Android Studio) Chapter8. Dialog pop-up (0) | 2023.03.04 |
(Android Studio) Chapter6. Fragment (0) | 2023.02.24 |
(Android Studio) Chapter5. Recycler View (0) | 2023.02.23 |
(Android Studio) Chapter4. Camera (0) | 2023.02.19 |