Activity代码:

public class MainActivity extends Activity {    private MyThread myThread;    private Handler handler; //子线程与UI主线程进行消息通信    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        //通过Handler获取子线程推送过来的消息handler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Bundle bundle = msg.getData();String value = bundle.getString("value");outputEditText.setText(value);}};//启动一个子线程myThread = new MyThread(handler);myThread.start();showDialog("Socket Thread Started!");    }    /**     * 对话框显示     */    private void showDialog(String msg){        new AlertDialog.Builder(this)                .setTitle("提示")                .setMessage(msg)                .setPositiveButton("ok", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {            }        }).show();    }}

 

Thread代码:

public class MyThread extends Thread{    private Handler handler;    public MyThread(Handler handler){        this.handler = handler;    }    @Override    public void run() {        try {            //持续向UI主线程发送当前日期时间            while(true){                TimeUnit.MILLISECONDS.sleep(1000);                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");                String date = sdf.format(new Date());                sendMessage(date);            }        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 向UI主线程发送消息     */    private void sendMessage(String msg){        Bundle data = new Bundle();        data.putString("value", msg);        Message message = new Message();        message.setData(data);        this.handler.sendMessage(message);    }}

 

需要刷新UI时的Handle实例化:

        在主线程中: Handler handler = new Handler();

        在其他线程中: Handler handler = new Handler(Looper.getMainLooper());

 

不用刷新UI时的Handle实例化:

        在主线程中: Handler handler = new Handler();

        在其他线程中: 

                Looper.prepare(); 

                Handler handler = new Handler();

                Looper.loop();

 

                或者

 

                Handler handler = new Handler(Looper.getMainLooper());

 

        message.what一般用于区别消息的。进程内传递数据可用setData(Bundle),进程间要用message.obj传递可序列化对象数据

 

更多相关文章

  1. Android消息推送机制调研
  2. Android消息循环机制源码分析
  3. Android消息机制之四---Looper,Handler,Message例子
  4. Android新线程中更新主线程UI中的View方法汇总
  5. Android 消息机制 进程调度问题

随机推荐

  1. android 禁止viewpager预加载
  2. 监控android binder size
  3. A20修改顶部状态栏 禁止跳转设置界面
  4. LGame(Android及J2SE游戏引擎)入门示例—
  5. 2019-11-07 Android谷歌支付SDK集成问题
  6. StagefrightPlayer&&AwesomePlayer 初步
  7. cvc-complex-type.2.4.d: 发现了以元素 '
  8. Laravel 创建可以传递参数 Console服务的
  9. laravel 根据不同组织加载不同视图的实现
  10. laravel 实现划分admin和home 模块分组