zoukankan      html  css  js  c++  java
  • 0115Handler(二)

     实现线程两种方法 Hanlder在默认情况下与Activity是处于同一线程的 1,实现Runnable接口 2,继承Thread这样一个类 都要实现run函数 启动线程的时候不是调用run函数而是调用start 函数, 调用run函数没有真的启动一个线程,而是在当前线程中执行这个函数 handler.post(runnable对象);此句话并没有调用start();方法,而是直接调用run();

    --------------------------------------

    Java 标准实现线程和启动线程的方法

    Thread t=new Thread(r);

    t.start();

    Runnable r=Runnable()

    { @override

    public void run(){}

    };

    当调用start方法时候,线程就处于就绪状态,当 cpu的时间片转到,就获得试用权时候

    -----------------------------------------

    bundle 可以将bundle看成一个相对特殊的map类型 键都是string类型 值是引用类型 就是一个数据存储工具,可以将需要的数据存储到bundle里面

    looper作用是循环的从队列中取得消息,在一个线程中使用looper,当队列中没有消息的时候就处于休眠状态 HandlerThread类已经实现了循环处理消息的功能

    生成一个 HandlerThread对象,实现了使用Looper来处理消息的队列

    Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called.

    HandlerThread handlerThread=new HandlerThread("handler_thread");

    --------------------------------------------------------------

    代码解释

    MyHandler myHandler=new MyHandler(handlerThread.getLooper());

    class MyHandler extends Handler{

    public MyHanlder()

    {}

    public MyHanlder(Looper looper){//接受looper意味着这个 handler接受当前的looper里     

                                                        //用当前looper所在的线程里的来处理消息队列                                               

                                                    //意味着将Handler绑定在另一个线程上来从消息队列取                                                 

                                               //这样MyHandler就在另一个线程中了 super(looper);

                                      //调用父类的构造函数,该父类就是就受一个looper }

    @override public void handleMessage(Message msg){

    }

    }

     Activity12.java

    package com.example.mars_activity12;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.HandlerThread;
    import android.os.Looper;
    import android.os.Message;
    import android.app.Activity;
    import android.view.Menu;
    
    public class Activity12 extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_activity12);
    		System.out.println("Activity-->"+Thread.currentThread().getId());
    		HandlerThread handlerThread=new HandlerThread("handler_thread");//创建新线程
    		handlerThread.start();//线程启动,这里面应该自动创建looper有了looper就有queue
    		NewHandler handler=new NewHandler(handlerThread.getLooper());//将新线程里面的looper传给handler
    		Message msg= handler.obtainMessage();
    		msg.sendToTarget();//将消息发送给目标,这个目标是生成这个msg的handler 同handler.sendMessage(msg);
    	
    		
    	}
    
    	class NewHandler extends Handler{
    		
    		public  NewHandler(Looper looper)//handler接受looper
    		{
    			super(looper);//复写父类的构造函数、、,新创建的handler与新线程的looper绑定
    			                 //则新创建的线程handlerThread里的队列控制者looper,与新创建的handler绑定
    		}
    
    		@Override
    		public void handleMessage(Message msg) {
    		
    			System.out.println("handler-->"+Thread.currentThread().getId());
    			System.out.println("handleMessage");
    		}
    		
    	}
    
    }
    

      

  • 相关阅读:
    sql 日期格式化 比较全面
    SQL Server 2005 中的树形数据处理示例1
    Web网站的性能测试工具
    js实现时分秒
    sql查询远程数据库的表的数据并填充到本地数据库的表
    Windows 2003操作系统十四招加速大法
    window2003 server的一些优化设置_windows 2003
    解决html向aspx页面传值汉字乱码问题
    js快捷键大全 http://www.zhangxinxu.com/wordpress/?p=1667
    iis 重启命令
  • 原文地址:https://www.cnblogs.com/kyxyes/p/2883634.html
Copyright © 2011-2022 走看看