a站进入,网站改名工信部需要怎么做,发布软文,定制开发软件公司之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息#xff0c;然后在主线程(UI线程)中获取消息并修改UI#xff0c;那么可以不可以在由主线程发送消息#xff0c;子线程接收呢#xff1f;我们按照之前的思路写一下代码#xff1a;packagecn.lixyz.handlertest;…之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息然后在主线程(UI线程)中获取消息并修改UI那么可以不可以在由主线程发送消息子线程接收呢我们按照之前的思路写一下代码packagecn.lixyz.handlertest;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Message;importandroid.util.Log;importandroid.view.View;importandroid.widget.Button;public class MainActivity extendsActivity {privateButton button;privateHandler handler;private int i 0;Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button(Button) findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener() {Overridepublic voidonClick(View v) {Log.d(TTTT, onClick: Thread.currentThread().getName());Message msghandler.obtainMessage();handler.sendMessage(msg);}});WorkerThread wt newWorkerThread();wt.start();}class WorkerThread extendsThread {Overridepublic voidrun() {super.run();handler newHandler() {Overridepublic voidhandleMessage(Message msg) {super.handleMessage(msg);Log.d(TTTT, 收到了消息对象);}};}}}MainActivity.javaactivity_main.xml上面的问题貌似没什么错误但运行时却出错抛出异常09-17 04:01:31.655 15854-15869/? E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-120Process: cn.lixyz.handlertest, PID: 15854java.lang.RuntimeException: Cant create handler inside thread that has not called Looper.prepare()at android.os.Handler.(Handler.java:200)at android.os.Handler.(Handler.java:114)at cn.lixyz.handlertest.MainActivity$WorkerThread$1.(MainActivity.java:48)at cn.lixyz.handlertest.MainActivity$WorkerThread.run(MainActivity.java:48)提示我们没有调用Looper.prepare()无法创建线程原因是非主线程中默认是没有创建Looper对象的需要先调用Looper.prepare()启用Looper。修改一下上面的代码。packagecn.lixyz.handlertest;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Looper;importandroid.os.Message;importandroid.util.Log;importandroid.view.View;importandroid.widget.Button;public class MainActivity extendsActivity {privateButton button;privateHandler handler;Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button(Button) findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener() {Overridepublic voidonClick(View v) {Message msghandler.obtainMessage();msg.what 100;handler.sendMessage(msg);Log.d(TTTT, sendMessage: Thread.currentThread().getName());}});WorkerThread wt newWorkerThread();wt.start();}class WorkerThread extendsThread {Overridepublic voidrun() {super.run();Looper.prepare();handler newHandler() {Overridepublic voidhandleMessage(Message msg) {super.handleMessage(msg);Log.d(TTTT, handleMessage: Thread.currentThread().getName());int i msg.what;Log.d(TTTT, 收到了消息对象: i);}};Looper.loop();}}}MainActivity.javaactivity_main.xml运行结果09-17 04:29:48.669 28397-28397/cn.lixyz.handlertest D/TTTT﹕ sendMessage:main09-17 04:29:48.669 28397-28410/cn.lixyz.handlertest D/TTTT﹕ handleMessage:Thread-14109-17 04:29:48.669 28397-28410/cn.lixyz.handlertest D/TTTT﹕ 收到了消息对象:100上面代码表示消息是从MainThread发送的WorkerThread接收到了消息。PS非UI线程默认是没有创建Looper对象的所以需要主线程向子线程传递消息时需创建Looper对象并启动循环子线程才可以循环着从MaessageQueue中取出消息。