마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

메인 쓰레드 에러 해결방법 알려주세요!

0 추천

모바일 내에 설치된 어플들을 목록으로 불러들이고 특정 앱을 클릭하면

그 앱의 이름,패키지 정보,권한정보 등을 새로운 activity에서 보여주는 코드를 돌리고 있는데

아래와 같은 에러가 뜹니다.

//
   [ 11-08 12:14:09.120  3380: 3380 D/         ]  HostConnection::get() New Host Connection established 0xaac03480, tid 3380

   [ 11-08 12:14:09.124  3380: 3380 W/         ]

      Unrecognized GLES max version string in extensions: ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1
                                                                                                       
                                                                                                        [ 11-08 12:14:09.247  3380: 3436 D/         ]
                                                                                                        HostConnection::get() New Host Connection established 0xaac03c00, tid 3436
                                                                                                       
                                                                                                       
                                                                                                        [ 11-08 12:14:09.249  3380: 3436 W/         ]
                                                                                                        Unrecognized GLES max version string in extensions: ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1
11-08 12:14:09.319 3380-3436/activity.appslist.demo.android.ibc.com.swu_analyzingapp2 I/OpenGLRenderer: Initialized EGL, version 1.4
11-08 12:14:09.404 3380-3436/activity.appslist.demo.android.ibc.com.swu_analyzingapp2 D/EGL_emulation: eglCreateContext: 0xab2abe00: maj 2 min 0 rcv 2
11-08 12:14:09.434 3380-3436/activity.appslist.demo.android.ibc.com.swu_analyzingapp2 D/EGL_emulation: eglMakeCurrent: 0xab2abe00: ver 2 0 (tinfo 0xacc2ef50)
11-08 12:14:09.548 3380-3436/activity.appslist.demo.android.ibc.com.swu_analyzingapp2 D/EGL_emulation: eglMakeCurrent: 0xab2abe00: ver 2 0 (tinfo 0xacc2ef50)
11-08 12:14:11.086 3380-3380/activity.appslist.demo.android.ibc.com.swu_analyzingapp2 I/Choreographer: Skipped 86 frames!  The application may be doing too much work on its main thread.
11-08 12:14:12.008 3380-3380/activity.appslist.demo.android.ibc.com.swu_analyzingapp2 I/Choreographer: Skipped 53 frames!  The application may be doing too much work on its main thread.
11-08 12:14:12.088 3380-3386/activity.appslist.demo.android.ibc.com.swu_analyzingapp2 W/art: Suspending all threads took: 41.080ms
11-08 12:14:33.538 3380-3386/activity.appslist.demo.android.ibc.com.swu_analyzingapp2 W/art: Suspending all threads took: 16.396ms
....

 

이런 에러가 왜 생기는거고 어떻게 해결해야할까요?

thread가 뭔지도 모르는데... 자세한 답변 부탁드립니다!

익명사용자 님이 2017년 11월 8일 질문

1개의 답변

0 추천
 
채택된 답변
에러는 아니고 경고에 가까운 거죠. 물론 저런 skipped 된 것 때문에 동작이 튀거나, 안될 수 있죠.

기본적으로 하나의 앱은 다수의 프로세스를 가질 수 있고, 하나의 프로세스는 다수의 쓰레드를 동작시킬 수 있습니다.

보통은 하나의 프로세스로 동작합니다. (특정 서비스를 별도의 프로세스로 동작시키려면 따로 프로세스를 Manifest에서 지정해야 합니다.)

이때 Main Thread라는 것은 기본 프로세스 하나에 지정된 하나의 쓰레드입니다. 만약에 onCreate()에서 무한 루프를 돈다면, 다른 것들을 거의 동작을 못하게 됩니다. 이렇게 뭔가 헤비한 작업이 돌아간다면 (리스트뷰를 매우 많이 화면에 표시하거나) 이럴 경우, 해당 기능을 별도의 쓰레드로 실행하면 메인 쓰레드는 기본적인 사용자의 터치, 클릭, 스와이프 등의 동작에 빠르게 반응할 수 있습니다.

그래서, 서버 통신, 화면에 다수의 콘텐츠를 뿌려주는 것, 그리는 것 등은 Runnable이나 AsynTask와 같은 별도의 쓰레드로 동작하게 만드는 것입니다. 따라서 헤비한 로직이 있다면 Runnable, Async Task에서 동작하도록 구조를 바꾸면, Main Thread는 사용자 Interaction에만 집중할 수 있습니다.
Will Kim (43,170 포인트) 님이 2017년 11월 9일 답변
...