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(安卓)IntentService用法和源码分析
  2. Android(安卓)handler的Context内存泄露
  3. android 获取IP
  4. android字体闪烁动画(线程)
  5. Android消息机制不完全解析(下)
  6. Android消息推送机制调研
  7. android异步的几种方式
  8. Android(安卓)AudioFlinger
  9. Android中文API(128) —— HandlerThread

随机推荐

  1. MySQL中主键为0与主键自排约束的关系详解
  2. mysql中find_in_set()函数的使用详解
  3. Windows下MySQL8.0.11社区绿色版安装步骤
  4. MySql 5.7.17压缩包免安装的配置过程图解
  5. MySql 8.0.11安装配置教程
  6. MySQL外键约束常见操作方法示例【查看、
  7. MySql 5.7.21免安装版本win10下的配置方
  8. mysql 开放外网访问权限的方法
  9. Linux安装mysql并配置外网访问的实例
  10. Windows系统中完全卸载MySQL数据库实现重