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

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

    用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. [移动开发] Android加载器Loaders 5 个条目
  3. [JavaScript程序设计] 关于HTTP Keep-Alive 6 个条目
  4. [PHP程序设计] CodeIgniter与PHP框架设计 5 个条目
  5. [PHP程序设计] PHP数组的遍历 7 个条目
  6. [移动开发] Android抽屉导航NavigationDrawer 5 个条目
  7. [移动开发] 使用support-v7 ActionBar前的那些坑 3 个条目
  8. [智力开发与知识管理] 学习编程为什么没会这么难? 7 个条目
  9. [移动开发] 从代码角度去认识HttpClient 2 个条目
  10. [PHP程序设计] PHP与Stream流 5 个条目
  11. [Python程序设计] Django后台管理系统 2 个条目
  12. [移动开发] ListView 使用相关问题集 1 个条目
窗口 -- [博客]