0

다른 스레드에서 setBackgroundColor()를 통해 LinearLayout의 배경을 어떻게 변경합니까?안드로이드에서 스레드별로 UI 요소를 변경하십시오.

Android UI Framework는 스레드 세이프가 아니므로 UI ​​스레드가 아닌 다른 스레드로 UI 요소를 변경할 수 없음을 알게되었습니다.

내 목표는 전체 화면을 채우는 LinearLayout에서 색상 (이 경우 흑백)을 변경하여 setBackgroundColor() 메서드를 호출하여 스트로브 라이트 효과를 만드는 것입니다.

답변

6

한 가지 방법은 메시지 대기열에 Handler을 사용하는 것입니다. 기본 UI 스레드에서 Handler을 인스턴스화 한 다음 obtainMessage()을 사용하여 Handler에 메시지를 보냅니다.

public final Handler updateTextView = new Handler(){ 
    @Override 
    public void handleMessage(Message msg) 
    { 
     if(msg.what == UPDATE_TEXT){ 
      myTextView.setText("arg1 = " + msg.arg1 + 
          "; arg2 = " + msg.arg2 + "; " + (String)msg.obj); 
     } 
    } 
} 

그런 다음 당신의 스레드에서 호출 할 수 같은 예는 다음과 같습니다

String myString = new String("test"); 
updateTextView.obtainMessage(UPDATE_TEXT, 10, 20, myString).sendToTarget(); 

myTextView 될 것 번만 호출하면 그 결과는 지금 말한다 "ARG1 = 10; ARG2 = 20; 테스트".

0

블로그를 읽고 painless threading에 대한 블로그 포스트. 기본적으로 UI 변경은 UI 스레드에서 발생해야합니다. 기사는 그것을 달성하는 몇 가지 방법을 설명합니다. 귀하의 경우에 IMO는 AsyncTask을 사용하는 것이 가장 좋습니다.

+0

스레딩! = 고통없는 =] – DJPlayer

관련 문제