1 package com.example.gp08_day26_handler3; 2 3 import android.os.Bundle; 4 import android.os.Handler; 5 import android.os.Looper; 6 import android.os.Message; 7 import android.app.Activity; 8 import android.view.Menu; 9 import android.view.View; 10 11 /** 12 * 主线程给子线程发消息 13 * @author qq 14 * 15 */ 16 public class MainActivity extends Activity { 17 18 private Handler handler;//需要在子线程中实例化 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.activity_main); 23 } 24 25 public void sendMessage(View v) 26 { 27 //点击按钮给子线程发消息 28 Message msg = Message.obtain(); 29 msg.obj ="hello,你好!"; 30 //把Message对象放入handler内部的MessageQueue对象,而handler内部的MessageQueue引用指向的是 Looper中的MessageQueue 31 handler.sendMessage(msg); 32 } 33 //创建子线程 34 class MyThread extends Thread 35 { 36 public void run() 37 { 38 //需要先有Looper对象 39 Looper.prepare();//会创建一个Looper对象,并把该对象放入到该线程的本地变量中,在Looper的构造方法中创建了MessageQueue对象 40 //在子线程中实例化handler,子线程中没有Looper对象 41 42 // mQueue = mLooper.mQueue; handler内部的MessageQueue引用指向的是 Looper中的MessageQueue对象 43 handler = new Handler();//如果直接实例化Handler,会异常 new RuntimeException,原因是子线程中没有Looper对象 44 45 //让Looper对象循环读取MessageQueue中的消息 46 //循环从队列中读取消息,当读到消息时,回去调用 msg.target.dispatchMessage(msg); 47 //在Message类中有一个target成员,当发送消息时,target成员被赋值为当前的 handler对象 48 Looper.loop(); 49 } 50 } 51 52 }
mainActivity
时间: 2024-10-12 09:26:13