• 从UI Thread向Worker Thread发送消息对象

    补充线程间的数据传递
    服务器君一共花费 14.076 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    用Handler实现线程间的消息通信 这个实例中,我们在 Worker Thread 中将消息发送到主线程里,然后修改 UI。其实标题起得不是那么对…… 因为我们还需要一种需求,就是在 UI Thread 将消息发送到 Worker Thread,两者结合起来才叫做“线程间的消息通信”。而且这种需求也很普遍,比如我们在首页的图片列表中,点击刷新,或者下来刷新什么的,就可能需要从 UI Thread 中发送消息给 Worker Thread,然后 Worker Thread 去检查服务器,看有没有内容更新,有就更新,没有就阻塞。

    那么现在我们就来做这么一个最简单的小例子来说明吧:

    private Button btn_refresh;
    private Handler refrsh_handler;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.activity_main);
    	
    	btn_refresh = (Button)findViewById(R.id.btn_refresh);
    	btn_refresh.setOnClickListener(new OnClickListener(){
    
    		@Override
    		public void onClick(View v) {
    			// TODO Auto-generated method stub
    			Message msg = refrsh_handler.obtainMessage();
    			refrsh_handler.sendMessage(msg);
    		}
    		
    	});
    	
    	RefreshThread rt = new RefreshThread();
    	rt.start();
    }
    
    class RefreshThread extends Thread{
    	@Override
    	public void run(){
    		Looper.prepare();
    		refrsh_handler = new Handler(){
    			@Override
    			public void handleMessage(Message msg){
    				System.out.println("接收到来自主线程的消息了。");
    			}
    		};
    		Looper.loop();
    	}
    }
    
    1. 点击按钮 btn_refresh,创建一个 msg 对象,利用 refrsh_handler 将消息 msg 发送到消息队列中。
    2. 实例化线程 RefreshThread,RefreshThread 利用 Looper 对象从消息队列中将数据取出。

    很简单的过程。程序运行结果如下:

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [智力开发与知识管理] 整体性学习策略 9 个条目
  2. [C语言程序设计] 结构体基本知识 1 个条目
  3. [数据库技术] 数据库范式篇 5 个条目
  4. [移动开发] 从代码角度去认识HttpClient 2 个条目
  5. [PHP程序设计] PHP与函数式编程 1 个条目
  6. [Linux操作系统] 基本 Linux Shell 命令 2 个条目
  7. [软件工程与项目管理] 开始使用Git 3 个条目
  8. [移动开发] 从代码角度去认识 Thread 9 个条目
  9. [Python程序设计] Django架构流程分析 7 个条目
  10. [软件工程与项目管理] 浏览器的CSS解析 7 个条目
  11. [Python程序设计] 标准库:urllib/urllib2 14 个条目
  12. [移动开发] Content Provider内容提供者 3 个条目
窗口 -- [资讯]