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

안드로이드 자바 메인스레드, 별도 스레드 질문있어요..

0 추천
스레드쪽을 전문적으로 배운게 없어 이렇게 문의드립니다.

private void thread5(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    if(stIsThread_IndexPage){
                        //할일
                    }
                }
            }
        }).start();
    }

 

이런식으로 thread1~5를 만들어서 작업하고있습니다.

저렇게 만들면 메인스레드가 아니라 별로 스레드라고 생각하고있었는데

 

Skipped 40 frames!  The application may be doing too much work on its main thread.

 

이렇게 에러가 뜨는군요....

 

물론 전체소스와 클래스들은 핸들러를 이용하여, 어떤작업을 하고있습니다.

 thread1~5를 1개만 쓰면 괜찮은데

 

6개정도 더 만들어서 사용하니

위와같은 Skipped 71 frames!  The application may be doing too much work on its main thread.

반응이구, 느려지는군요..

 

new Thread(new Runnable() {

 

는 메인 스레드인가요?

 

관련 정보나, 스레드 사용팁, 사용경험 ...많은 가르침 부탁드립니다. ㅠㅠ
뇽뇽이2841 (1,120 포인트) 님이 2015년 12월 1일 질문

1개의 답변

0 추천
당연히 별도입니다.
그런데 핸들러를 쓰신다면, 핸들러의 일은 결국 메인에서 하게되는 결과가 되죠.
Jinthree (8,980 포인트) 님이 2015년 12월 2일 답변
답변감사합니다 궁금한게있는데

핸들러를 쓰긴하는데, 핸들러는 다른 일을 하고 있고,

별도로private void thread5(){new Thread(new Runnable()}

스레드를 1~5개 만들어서 사칙연산같은 간단한 연산을 하고 있는데


답변주신말은 별도 스레드가 하는일이 결국 메인에서 하는 게 된다는건가요..?

제가 무지하여 잘이해를 못했습니다..ㅠ
아뇨, 핸들러에게 할당된 일은 결국 메인스레드가 돌린다는 의미입니다. 별도 스레드는 자신의 일을 하죠.

다만... 주의하셔야 할점은 이점입니다.
스레드가 많아지면 결국 메인 스레드가 일을 할 시간도 줄어듭니다. CPU입장에서 볼때 할일이 많아지는거니까요. 별도 스레드를 돌리면 메인 스레드의 버벅임이 줄어든다는건 이론적으로 운영체제가 매우 작은 시간 단위로 일을 나눠처리하기 때문입니다. 메인에서 직접 다른 일을 하면 그걸 하느라 UI처리가 늦어지기 때문에 스레드를 나누죠.

하지만 전체적인 할일 자체가 CPU가 감당하기에 많아지게되면 모든게 느려질 수 밖에 없는겁니다.

설명이 너무 장황했는데 요약하자면 말씀하시는 일이 결국 핸들러로 다 전달되거나 아니면 그냥 일 자체가 많은 것 이렇개 두가지 원인이 있습니다.
...