Timertask 또는 핸들러
10 초마다 몇 가지 작업을 수행하고 싶고 뷰를 업데이트 할 필요가 없다고 가정 해 보겠습니다.
질문은 다음과 같이 timertask와 함께 타이머를 사용하는 것이 더 낫습니까 (더 효율적이고 효과적이라는 의미입니다).
final Handler handler = new Handler();
TimerTask timertask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
<some task>
}
});
}
};
timer = new Timer();
timer.schedule(timertask, 0, 15000);
}
또는 postdelayed가있는 핸들러
final Handler handler = new Handler();
final Runnable r = new Runnable()
{
public void run()
{
<some task>
}
};
handler.postDelayed(r, 15000);
또한 어떤 접근 방식을 사용해야하는지, 왜 그중 하나가 다른 접근 방식보다 더 효율적인지 설명해 주시면 감사하겠습니다.
Handler
보다 낫습니다 TimerTask
.
Java TimerTask
와 Android Handler
모두 백그라운드 스레드에서 지연 및 반복 작업을 예약 할 수 있습니다. 그러나 문헌 은 Android에서 Handler
over TimerTask
를 사용 하는 것을 압도적으로 권장합니다 ( here , here , here , here , here , here 참조 ).
TimerTask에보고 된 몇 가지 문제는 다음과 같습니다.
- UI 스레드를 업데이트 할 수 없습니다.
- 메모리 누수
- 신뢰할 수 없음 (항상 작동하지는 않음)
- 오래 실행되는 작업은 다음 예약 된 이벤트를 방해 할 수 있습니다.
예
내가 본 모든 종류의 Android 예제에 대한 최고의 소스는 Codepath 입니다. 다음은 Handler
반복되는 작업에 대한 예입니다.
// Create the Handler object (on the main thread by default)
Handler handler = new Handler();
// Define the code block to be executed
private Runnable runnableCode = new Runnable() {
@Override
public void run() {
// Do something here on the main thread
Log.d("Handlers", "Called on main thread");
// Repeat this the same runnable code block again another 2 seconds
handler.postDelayed(runnableCode, 2000);
}
};
// Start the initial runnable task by posting through the handler
handler.post(runnableCode);
관련
There are some disadvantages of using Timer
It creates only single thread to execute the tasks and if a task takes too long to run, other tasks suffer. It does not handle exceptions thrown by tasks and thread just terminates, which affects other scheduled tasks and they are never run
Copied from:
Kotlin version of accepted answer:
val handler = Handler()
val runnableCode = object : Runnable {
override fun run() {
Log.d("Handlers", "Called on main thread")
handler.postDelayed(this, 2000)
}
}
handler.post(runnableCode)
참고URL : https://stackoverflow.com/questions/20330355/timertask-or-handler
'Programing' 카테고리의 다른 글
파이썬 프로그램을 어떻게 배포 할 수 있습니까? (0) | 2020.08.31 |
---|---|
Perl 배열을 반복하는 가장 좋은 방법 (0) | 2020.08.31 |
Android 라이브러리 프로젝트를 테스트하는 방법 (0) | 2020.08.31 |
Perl 어레이를 인쇄하는 쉬운 방법? (0) | 2020.08.30 |
PHP에서 현재 URL 경로 가져 오기 (0) | 2020.08.30 |