2012-12-02 7 views
0

나는 백그라운드 작업자 스레드를 사용하는 안드로이드 애플 리케이션에서 일하고 있습니다. 나는 활동에서 스레드에게 메시지를 보낼 수 있어야하지만, 나는 그것을 이해할 수 없다.안드로이드 쓰레드 및 메시징

나는 하나의 활동을 가지고 있으며 백그라운드에서 하나의 스레드가 작동합니다. 스레드를 시작하고 필요한 경우 메시지 (인수, 개체 등)를 보낼 수 있어야합니다. 쓰레드에서 액티비티로 메시지를 보내는 것을 마스터하고 (액티비티의 핸들러를 쓰레드에 전달하고 메시지를 보내기 위해), 액티비티로부터 쓰레드로 메시지를 보내려고 할 때마다 애플리케이션이 다운된다.

저는 온라인에서 발견 한 좋은 10-12 튜토리얼을 따르려고했습니다.이 튜토리얼은 모두 다른 방식으로 작동하는 것처럼 보이지만, 올바르게 작동하지는 못합니다. 누군가가 올바른 방향으로 나를 가리켜 주시겠습니까?

예 간단한 활동

import android.os.Bundle; 
import android.app.Activity; 

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savesInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    private void doWork() { 
     Worker worker = new Worker(); 
     worker.start(); 

     worker.handler.sendEmptyMessage(0); 
    } 
} 

예 간단한 스레드 : 당신이 사용하는 방법을 읽을 필요

import android.os.Handler; 
import android.os.Looper; 
import android.os.Message; 
import android.util.Log; 

public class Worker extends Thread { 
    public Handler handler; 

    public void run() { 
     Looper.prepare(); 

     handler = new Handler() { 
      public void handleMessage(Message msg) { 
       Log.d("Worker.run()", "Got message saying " + msg.what); 
      } 
     }; 

     Looper.loop(); 
    } 
+0

좋은 자습서 http://mindtherobot.com/blog/159/andro-to-loopers-and-handlers/ – Mikhaili

+0

@Mikhaili 전에이 파일을 보았지만 훌륭한 튜토리얼이지만 메시징은 전혀 다루지 않습니다. – tfrederick74656

답변

1

그것은을 위해 제에서 루퍼 중지하는 것을 잊지 마세요 루퍼입니다 끝 Goodluck

public class Worker extends Thread { 
    public Handler handler; 
@Override 
public run() { 
    Looper.prepare(); 
//initialization will take a little time you if you want to send message check if handler != null 
    handler = new Handler() { 
     public void handleMessage(Message msg) { 
      Log.d("Worker.run()", "Got message saying " + msg.what); 
     } 
    }; 

    Looper.loop(); 
} 

public void sendMessage(Message m) 
{ 
    while(handler == null); 
    handler.sendMessages(m); 
} 
+0

고마워요! 이 중 하나는 내 문제를 해결하고 다른 하나는 (NullPointerException 새로운 Handler를 호출 할 때 계속)이 질문에 따라 간단히 해결했습니다. http://stackoverflow.com/questions/2187464/how-do-i-ensure-another -threads-handler-not-null-before-call-it입니다. – tfrederick74656