기록:Handler,HandlerThread
Handler
관련류
관계
호출 프로세스
HandlerThread
스레드(Thread)에서는 기본적으로 Looper가 없으며 수동으로 추가해야 합니다.공식적으로HandlerThread 클래스를 제공하여 Looger 실례를 가진 라인을 만들 수 있습니다.Handler와 결합하여 하위 라인에서 시간 소모나 시간 지연 등의 작업을 수행할 수 있습니다.Handy class for starting a new thread that has a looper.
The looper can then be used to create handler classes.
Note that start() must still be called.
특징
Handy class for starting a new thread that has a looper.
The looper can then be used to create handler classes.
Note that start() must still be called.
사용
class MainActivity : AppCompatActivity() {
private lateinit var handlerThread: HandlerThread
private lateinit var handler: Handler
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
handlerThread = HandlerThread(javaClass.simpleName)
handlerThread.start()
handler = Handler(handlerThread.looper) {
//
true
}
}
override fun onDestroy() {
super.onDestroy()
handler.removeCallbacksAndMessages(null)
handlerThread.quit()
}
}
순환 끝내기
HandlerThread는 순환을 종료하는 두 가지 방법을 제공합니다.
quit
새로운 이벤트를 받아들이지 않고 메시지 대기열에 가입하지 않기 MessageQueue의 모든 메시지를 삭제합니다. 지연 메시지든 상관없습니다.
quitSafely
새로운 이벤트를 받아들이지 않고 메시지 대기열에 가입하지 않기 MessageQueue의 모든 지연 메시지 API 18을 삭제합니다: 메시지를 비우기 전에 모든 지연 메시지를 보냅니다
/**
* Quits the looper.
*
* Causes the {@link #loop} method to terminate without processing any
* more messages in the message queue.
*
* Any attempt to post messages to the queue after the looper is asked to quit will fail.
* For example, the {@link Handler#sendMessage(Message)} method will return false.
*
* Using this method may be unsafe because some messages may not be delivered
* before the looper terminates. Consider using {@link #quitSafely} instead to ensure
* that all pending work is completed in an orderly manner.
*
*
* @see #quitSafely
*/
public void quit() {
mQueue.quit(false);
}
/**
* Quits the looper safely.
*
* Causes the {@link #loop} method to terminate as soon as all remaining messages
* in the message queue that are already due to be delivered have been handled.
* However pending delayed messages with due times in the future will not be
* delivered before the loop terminates.
*
* Any attempt to post messages to the queue after the looper is asked to quit will fail.
* For example, the {@link Handler#sendMessage(Message)} method will return false.
*
*/
public void quitSafely() {
mQueue.quit(true);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 라인과synchronized 키워드를 깊이 있게 설명하다루틴이야말로 프로그램의 집행자이고 여러 루틴 간에 프로세스 중의 자원을 공유하고 있다.하나의 cpu는 동시에 하나의 라인만 실행할 수 있으며, 모든 라인은 하나의 타임 슬라이스가 있으며, 타임 슬라이스가 다 사용하면...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.