2017-12-06 1 views
2

루퍼를 이해하려고 노력 중입니다 ...루퍼 또는 스레드에있는 동안?

이번에는 (지금까지) while (true) 조건을 사용하여 스레드를 유지하기 때문에 조금 혼란스러워졌습니다. 무한 루프.

Looper 또는 while (true) 조건을 사용하는 것이 더 나은지 알고 싶습니다.

저는 인터넷에서 제 질문에 대한 가능한 대답을 검색했으며 Looper와 while (true)를 함께 사용하는 코드를 찾는 데 상당히 실망했습니다.

아마도 나는 루퍼를 사용할 점을 얻지 못했지만, 알다시피, 우리는 여기 배우려고 ... 그렇지 않습니까?

+0

나는 며칠 전에 여기에 멀티 스레딩을보고 있었고이 대답과이 강연을 보았습니다. 대답 - https://stackoverflow.com/a/29655572/2104990 강의 - https://www.youtube.com/watch?v=aV2XfWwpiDU&index=8&list=PLZ9NgFYEMxp50tvT8806xllaCbd31DpDy 문서 - https://developer.android.com /topic/performance/threads.html 이 인스턴스에서는 확실히 어려운 작업이 될 수 있지만, 도움이 될 것입니다. –

+0

이 문서에서는 핸들러 스레드 asynctask와 handlerthread의 차이점에 대해 설명합니다. 어쩌면 내 질문의 목적을 전달할 수 없었을 것입니다. 나는 Looper 클래스를 사용하는 것이 Thread 클래스의 run 메서드 내에서 while (true) 조건을 사용하는 것보다 낫다는 것을 이해하고 싶었습니다 ... 인터넷 (https://blog.mindorks.com/android-core- looper-handler-and-handlerthread-bd54d69fe91a) Looper를 사용하여 실행 파일을 큐에 넣을 수 있습니다. while (true) 조건을 사용하는 것보다 낫습니까? 그렇다면 왜? 우리는 그들을 조합하여 사용해야합니까? 그렇다면 왜? –

+1

[루퍼의 목적과 사용법은 무엇입니까?] (https://stackoverflow.com/questions/7597742/what-is-the-purpose-of-looper-and-how-to-use) -) –

답변

2

Looper은 을 통해 전송되는 Messages 프로세스로 스레드를 열어 두는 메커니즘입니다. 이러한 의미에서 스레드는 영원히 열려 있다는 점에서 while(true)과 유사합니다 (또는이 경우 명시 적으로 닫을 때까지). 그러나 while(true)과 달리 다른 스레드에서 메시지를 보낼 수 있습니다. Handler을 생성 할 때마다 생성 된 Looper 스레드에 바인드됩니다. 그러면 Handler에 메시지를 게시 할 때마다 메시지가 작성된 스레드에서 처리됩니다.

안드로이드에서 가장 일반적으로 잘 알려진 Looper 스레드가 주요 UI 스레드입니다. 이 스레드는 항상 실행 중입니다. 그것은 그것에 게시 된 코드를 실행합니다. 가장 일반적으로 드로잉 작업이지만 뷰를 가져와 View#post에 전화하면 다음 드로 사이클에서 코드가 실행됩니다. 모든 View 개체의 기본 UI 루퍼 스레드에서 작성된 Handler이 있기 때문입니다.

UI 루퍼는 실제로 Looper.getMainLooper() 메서드를 참조 할 수 있으며, new Handler(Looper.getMainLooper());과 같이이 스레드에 메시지를 게시하는 Handler을 만들 수 있습니다.

비록 당신이 자신의 Looper 스레드를 만들 수 있지만 UI 스레드에 대한 병렬 스레드로 작동합니다. 드로잉 작업을 수행 할 수는 없지만이를 다른 작업을위한 작업자 스레드로 사용할 수 있습니다. 그렇게하면 집중적 인 작업을 수행 할 때마다 새 스레드를 생성하는 오버 헤드가 발생하지 않습니다.

+0

이것은 내가 찾고있는 대답이다. @DeeV. Looper를 사용하고 (true) 함께 사용하는 것이 적합한 경우 (적어도 하나)가 있다고 말할 수 있습니까? –

+2

@AndreaZedda 아니요 둘 다 사용할 필요가 없습니다. 루퍼는 더 강력하므로'while (true) '이상으로 사용하는 것이 좋습니다. – DeeV

+1

@AndreaZedda 루퍼는 당신이'while (true)'로 무엇을 할 것인가에 대한 잘 구조화 된 대체물입니다. – payloc

1

루퍼 또는 while (true) 조건을 사용하는 것이 더 나은지 알고 싶습니다. 당신은 몇 가지 매우 구체적인 낮은 수준의 제어를 필요로하지 않는

나는, 는 프레임 워크 중 프레임 워크,에서 제공하는 API를 사용하여, 일반적으로 말할 것입니다.

그들은 일반적으로 등등 메시징, 작업 삭제하고, 그렇지 않으면 당신은 그들에게 자신을 구현하는 것 여러 측면, 알아서

...

나는 while (true) 루프 일부를 달성하기 위해 노력하고 추측 정기적 인 작업 반복.

이 특별한 경우, 예, UI 스레드가 차단되지 않도록, Looper 자체와 Handler을 사용하고 postDelay(Runnable, long)와 함께 정기적으로 Runnable 인스턴스를 게시 할 수 있습니다.

@DeeV의 대답은 이미 언급 된 구성 요소에 대한 이해를 돕지 만 Android 설명서에서 필요한 모든 것을 확실히 찾을 수 있습니다.