일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- oracle
- spring data jpa
- 리눅스
- NIO
- 역학
- 데이터베이스
- write by GPT-4
- 파이썬
- 고전역학
- JVM
- 인프라
- 유닉스
- GPT-4's answer
- spring integration
- Java
- 코틀린
- 자바네트워크
- 소프트웨어공학
- jpa
- 자바암호
- Database
- flet
- 시스템
- android
- 웹 크롤링
- chatGPT's answer
- write by chatGPT
- 자바
- kotlin
- python
- Today
- Total
기억을 지배하는 기록
Android Thread 내에서 UI 핸들링 본문
별거 아니지만 모르고 있으면 큰 낭패를 당하는 내용입니다.
아래의 Code는 Exception이 발생합니다.
public class BuggingService extends Service {
private Timer timer;
private int counter;
private TimerTask executeAgain = new TimerTask() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "I poop on you", Toast.LENGTH_LONG).show();
}
};
Android에서는 Thread내에서는 UI이 변경을 직접적으로 하지 못하게 되어 있습니다. 위의 Code에서 Toast는 UI 요소이기 때문에 Exception이 발생하게 되는 것입니다.
해결 방법은 두 가지가 있습니다.
Activity에서 Thread을 호출한다면? “runOnuiThread” Method를 이용합니다.
대부분은 “Handler.post” 방식을 이용합니다.
runOnuiThread 방식 예
activity.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(activity, "Hello", Toast.LENGTH_SHORT).show();
}
});
Handler.post 방식 예
final Handler handler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
while (isInboxThreadRunning) {
handler.post(new Runnable() {
public void run() {
Toast.makeText(activity, "Hello", Toast.LENGTH_SHORT).show();
}
});
SystemClock.sleep(1 * 60 * 1000);
}
}
}).start();
'오래된글 > Articles' 카테고리의 다른 글
Getting all EJB home interface object from a HashMap (0) | 2018.04.19 |
---|---|
안정성 패턴 (0) | 2018.04.19 |
Java VM Core Dump 분석 (0) | 2018.04.19 |
Java Memory Model (0) | 2018.04.19 |
Capacity Patterns(용량 패턴) (0) | 2018.04.19 |