Handler 통신을 이용하여 시스템 시간을 실시간으로 표시하다
이 프로그램은 Handler, Timer, TimerTask, Message 등 관건적인 기술을 사용하여 화면에 시스템을 실시간으로 표시하는 시간을 실현했다.
사고 분석:
안드로이드에서 프로그램이 주 스레드 (UI 스레드) 에서 호출되거나 시간이 걸리는 작업을 할 수 없다는 것을 우리는 모두 알고 있다.그래서 우리는 반드시 주 라인에 가서 다른 라인을 만들어 시간이 걸리는 조작을 해야 한다.마치 우리가 패스트푸드점을 연 것 같다. 패스트푸드점에서 프론트 데스크를 UI의 메인 라인으로 볼 수 있고 그는 고객과 상호작용을 담당한다.또 다른 일부는 배달원이다. 그는 패스트푸드를 배달하는 것을 책임진다. 즉, 그는 일부 시간 소모 조작을 책임진다.
이렇게 되면 고객이 프런트에 배달된 패스트푸드를 달라고 할 때 프런트에서 이 비용의 조작을 배달원에게 맡길 수 있다. 이후에 프런트는 당분간 배달이 어떻게 이 패스트푸드를 배달하는지 상관하지 않아도 된다.이것은 사용자와 UI 스레드가 상호작용할 때 사용자가 시간이 걸리는 작업을 수행하는 것과 같다. 이때 UI 스레드는 이 시간이 걸리는 작업을 다른 스레드에 맡긴다. 이후에 UI 스레드는 이 스레드가 어떻게 임무를 수행하는지 상관하지 않아도 된다.
그러면 구체적인 실현 절차는 어떻습니까?본 프로그램의 도움을 빌려 일부 메인 라인과 시간 소모 라인, 그리고Handler가 정보를 전달하는 메커니즘을 이해할 수 있다.
Handler로 정보를 전달하려면 메시지 클래스의 실례가 있어야 한다.인스턴스에는 다음과 같은 3개의 인스턴스 변수가 있습니다.
what: 사용자가 정의한 int형 메시지 코드로 메시지를 설명합니다. (컨트롤의 id와 유사할 수 있습니다.)
obj: 메시지를 보내는 사용자가 지정한 대상(그것의 이름을 보면 Object의 유형임을 알 수 있다. 즉, 당신이 어떤 메시지를 전달하고 싶으면 어떤 메시지를 전달할 수 있다는 것이다).
target: 메시지를 처리하는 Handler입니다.
코드 데모:
또한 실시간으로 시간을 표시하려면 타이머 Timer 객체가 있어야 합니다.
Timer timer = new Timer(); // ,
/**
* ........
*/
timer.schedule(timerTask, 0, 1000);
여기서 우리는 1초를 시간 주기로 한다.
타이머 대상에서 TimerTask 대상이 실행되었습니다. 메시지 내용을 보내는 데 사용할 라인을 얻었습니다.
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = MESSAGE_WHAT_UPDATE_VIEW;
message.obj = view;
handler.sendMessage(message);
}
};
이상은 라인에서 메시지를 보내는데 우리는handler로 정보를 받고 받은 메시지 내용에 따라 시간 조작을 수행할 수 있다.다음과 같습니다.
Handler handler = new Handler() {
public void handleMessage(android.os.Message message) {
View view = (View) message.obj;
updateView(view);
}
};
패스트푸드점처럼 프런트에서 고객이 무엇을 먹고 싶은지 받아야만 배달원에게 무엇을 배달해야 하는지 알려주는 것이 일리가 있다.이 업데이트View(view)는 얻은view로 Fragment이나Activity의 내용을 재생성합니다.
오른쪽을 클릭하여 데모 소스 획득:Handler를 이용한 실시간 업데이트 시간
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 라인과synchronized 키워드를 깊이 있게 설명하다루틴이야말로 프로그램의 집행자이고 여러 루틴 간에 프로세스 중의 자원을 공유하고 있다.하나의 cpu는 동시에 하나의 라인만 실행할 수 있으며, 모든 라인은 하나의 타임 슬라이스가 있으며, 타임 슬라이스가 다 사용하면...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.