Java Android线程和消息传递

Java Android线程和消息传递,java,android,multithreading,handler,looper,Java,Android,Multithreading,Handler,Looper,我正在开发一个使用后台工作线程的Android应用程序。我需要能够从活动向线程发送消息,但我不能完全理解 我有一个活动和一个线程在后台工作。我希望启动线程,并能够在需要时向其发送消息(参数、对象等)。我已经掌握了从线程向活动发送消息(通过将活动的处理程序传递给线程,并使用该处理程序发送消息),但是每当我尝试从活动向线程发送消息时,应用程序就会崩溃 我试着按照我在网上找到的10-12个很好的教程来做,所有这些教程似乎都有不同的做事方式,但我仍然没有让它正常工作。有人能给我指一下正确的方向吗 一个简

我正在开发一个使用后台工作线程的Android应用程序。我需要能够从活动向线程发送消息,但我不能完全理解

我有一个活动和一个线程在后台工作。我希望启动线程,并能够在需要时向其发送消息(参数、对象等)。我已经掌握了从线程向活动发送消息(通过将活动的处理程序传递给线程,并使用该处理程序发送消息),但是每当我尝试从活动向线程发送消息时,应用程序就会崩溃

我试着按照我在网上找到的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();
    }

您必须阅读如何使用和这是活套第一,不要忘记停止活套在最后祝好运

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); 
}

很好的教程@Mikhaili我以前看过这个教程,这是一个很好的教程,但是它根本不包括消息传递。谢谢!这解决了我的一个问题,而另一个问题(我在调用新处理程序时不断遇到的NullPointerException)我只是通过以下问题解决了