Android 서비스에서는 멀티스레딩을 사용하여 기본 UI 스레드를 차단하지 않고 리소스 집약적인 작업을 수행하는 경우가 많습니다. 그러나 메시지 대기열에 작업을 게시하는 등 백그라운드 스레드가 기본 스레드와 상호 작용해야 하는 상황이 발생합니다.
이 문제를 해결하기 위해 Android 프레임워크는 핸들러를 사용하여 스레드 간 통신을 위한 메커니즘을 제공합니다. 핸들러는 지정된 루퍼에서 메시지를 처리할 수 있는 개체입니다. 메인 스레드의 Looper와 연결된 핸들러를 사용하면 다른 스레드에서 메인 스레드의 메시지 대기열에 작업을 게시할 수 있습니다.
해결책 1: 컨텍스트 개체 사용
백그라운드 스레드에 Context 개체(애플리케이션 컨텍스트 또는 서비스 컨텍스트)에 대한 참조가 있는 경우 다음과 같이 기본 Looper의 핸들러에 액세스할 수 있습니다. 다음:
// Get a handler that can be used to post to the main thread Handler mainHandler = new Handler(context.getMainLooper()); // Prepare a Runnable task to be posted Runnable myRunnable = new Runnable() { @Override public void run() {....} // This is your code }; // Post the task to the main thread mainHandler.post(myRunnable);
해결책 2: 컨텍스트 개체 없음
백그라운드 스레드가 Context 개체에 액세스할 수 없는 경우 보다 직접적인 접근 방식을 사용할 수 있습니다. @dzeikei가 제안한 대로:
// Get a handler that can be used to post to the main thread Handler mainHandler = new Handler(Looper.getMainLooper()); // Prepare a Runnable task to be posted Runnable myRunnable = new Runnable() { @Override public void run() {....} // This is your code }; // Post the task to the main thread mainHandler.post(myRunnable);
위 내용은 Android 서비스에서 크로스 스레드 통신을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!