Service에서 수행한다는 것은 Main thread에서 실행을 의미하고, thread에서 수행한다는 것은 Main thread의 자식 thread에서 실행하는 것.
android에서는 apk를 실행하면 보통 하나의 process가 생성( 하나의 apk에 여러 개의 process맵핑도 가능)
process가 생성되면 thread가 하나 생기는데 이를 Main Thread( = UI Thread)라고 함.
thread를 application의 모든 component(activity, service,contentprovider..)들이 공유.
그리고 모든 component event( View UI event , BroadcastRecicever호출등…)를 Main thread에서 처리.
즉, 하나의 activity에서 startService하면 여전히 Main thread가 실행하는 것임.
여기서 Service에서 overload가 많이 걸리는 작업을 수행하면 UI holding이 일어나기도 하고 ANR에도 걸림.
이를 피하기 위해 자식 thread를 생성하여 UI적이지 않은 작업을 수행하고 ANR을 피함
이 thread에서 View 메소드를 직접 호출해서 화면 갱신을 할 수 없음.
( Message Handler를 통해 Main thread에서 다루어져야 함 – AsyncTask class가 이에 대한 wrapper class임.)
.
댓글 없음:
댓글 쓰기