当前位置: 首页 > news >正文

贵阳做网站的大公司重庆高端网站设计

贵阳做网站的大公司,重庆高端网站设计,简述网站栏目管理,wordpress 查看版本总结4个关键概念 1、MessageQueue#xff1a;是一种数据结构#xff0c;见名知义#xff0c;就是一个消息队列#xff0c;存放消息的地方。每一个线程最多只可以拥有一个MessageQueue数据结构。 创建一个线程的时候#xff0c;并不会自动创建其MessageQueue。通常使用一个… 总结4个关键概念  1、MessageQueue是一种数据结构见名知义就是一个消息队列存放消息的地方。每一个线程最多只可以拥有一个MessageQueue数据结构。 创建一个线程的时候并不会自动创建其MessageQueue。通常使用一个Looper对象对该线程的MessageQueue进行管理。主线程创建时会创建一 个默认的Looper对象而Looper对象的创建将自动创建一个Message Queue。其他非主线程不会自动创建Looper要需要的时候通过调 用prepare函数来实现。 2、Message消息对象Message Queue中的存放的对象。一个Message Queue中包含多个Message。 Message实例对象的取得通常使用Message类里的静态方法obtain(),该方法有多个重载版本可供选择它的创建并不一定是直接创建一个新的实例 而是先从Message Pool(消息池)中看有没有可用的Message实例存在则直接取出返回这个实例。如果Message Pool中没有可用的Message实例 则才用给定的参数创建一个Message对象。调用removeMessages()时将Message从Message Queue中删除同时放入到Message Pool中。除了上面这 种方式也可以通过Handler对象的obtainMessage()获取一个Message实例。 3、Looper 是MessageQueue的管理者。每一个MessageQueue都不能脱离Looper而存在Looper对象的创建是通过prepare函数来实现的。同时每一个Looper对象 和一个线程关联。通过调用Looper.myLooper()可以获得当前线程的Looper对象 创建一个Looper对象时会同时创建一个MessageQueue对象。除了主线程有默认的Looper其他线程默认是没有MessageQueue对象的所以不能 接受Message。如需要接受自己定义一个Looper对象(通过prepare函数),这样该线程就有了自己的Looper对象和MessageQueue数据结构了。 Looper从MessageQueue中取出Message然后交由Handler的handleMessage进行处理。处理完成后调用Message.recycle()将其放入Message Pool中。4、Handler 消息的处理者handler负责将需要传递的信息封装成Message通过调用handler对象的obtainMessage()来实现 将消息传递给MessageQueue这是通过handler对象的sendMessage()来实现的。当Looper对象看到MessageQueue中含有Message就将其广播出去。该handler对象收到该消息后调用相应的handler对象的handleMessage()方法 对其进行处理。二、线程之间的消息如何进行传递 1、主线程给自己发送Message  public class MainActivity extends Activity {            private Button btnTest;            private TextView textView;            private Handler handler;            Override            public void onCreate(Bundle savedInstanceState) {                    super.onCreate(savedInstanceState);                    setContentView(R.layout.main);                    btnTest (Button)this.findViewById(R.id.btn_01);                    textView (TextView)this.findViewById(R.id.view_01);                    btnTest.setOnClickListener(new View.OnClickListener() {                            Override                            public void onClick(View arg0) {                                    Looper looper Looper.getMainLooper(); //主线程的Looper对象                                    //这里以主线程的Looper对象创建了handler                                    //所以这个handler发送的Message会被传递给主线程的MessageQueue。                                    handler new MyHandler(looper);                                    handler.removeMessages(0);                                    //构建Message对象                                    //第一个参数是自己指定的message代号方便在handler选择性地接收                                    //第二三个参数没有什么意义                                    //第四个参数需要封装的对象                                    Message msg handler.obtainMessage(1,1,1,主线程发消息了);                                    handler.sendMessage(msg); //发送消息                            }                    });            }            class MyHandler extends Handler{                    public MyHandler(Looper looper){                            super(looper);                    }                    public void handleMessage(Message msg){                            super.handleMessage(msg);                            textView.setText(我是主线程的Handler收到了消息(String)msg.obj);                    }            }    }     2、其他线程给主线程发送Message   public class MainActivity extends Activity {            private Button btnTest;            private TextView textView;            private Handler handler;            Override            public void onCreate(Bundle savedInstanceState) {                    super.onCreate(savedInstanceState);                    setContentView(R.layout.main);                    btnTest (Button)this.findViewById(R.id.btn_01);                    textView (TextView)this.findViewById(R.id.view_01);                    btnTest.setOnClickListener(new View.OnClickListener() {                            Override                            public void onClick(View arg0) {                                    //可以看出这里启动了一个线程来操作消息的封装和发送的工作                                    //这样原来主线程的发送就变成了其他线程的发送简单吧呵呵                                    new MyThread().start();                                    }                    });            }            class MyHandler extends Handler{                    public MyHandler(Looper looper){                            super(looper);                    }                    public void handleMessage(Message msg){                            super.handleMessage(msg);                            textView.setText(我是主线程的Handler收到了消息(String)msg.obj);                    }            }            //加了一个线程类            class MyThread extends Thread{                    public void run(){                            Looper looper Looper.getMainLooper(); //主线程的Looper对象                            //这里以主线程的Looper对象创建了handler                            //所以这个handler发送的Message会被传递给主线程的MessageQueue。                            handler new MyHandler(looper);                            //构建Message对象                            //第一个参数是自己指定的message代号方便在handler选择性地接收                            //第二三个参数没有什么意义                            //第四个参数需要封装的对象                            Message msg handler.obtainMessage(1,1,1,其他线程发消息了);                            handler.sendMessage(msg); //发送消息                                            }            }    }    3、主线程给其他线程发送Message   public class MainActivity extends Activity {            private Button btnTest;            private TextView textView;            private Handler handler;            Override            public void onCreate(Bundle savedInstanceState) {                    super.onCreate(savedInstanceState);                    setContentView(R.layout.main);                    btnTest (Button)this.findViewById(R.id.btn_01);                    textView (TextView)this.findViewById(R.id.view_01);                    //启动线程                    new MyThread().start();                            btnTest.setOnClickListener(new View.OnClickListener() {                            Override                            public void onClick(View arg0) {                                    //这里handler的实例化在线程中                                    //线程启动的时候就已经实例化了                                    Message msg handler.obtainMessage(1,1,1,主线程发送的消息);                                    handler.sendMessage(msg);                            }                    });            }            class MyHandler extends Handler{                    public MyHandler(Looper looper){                            super(looper);                    }                    public void handleMessage(Message msg){                            super.handleMessage(msg);                            textView.setText(我是主线程的Handler收到了消息(String)msg.obj);                    }            }            class MyThread extends Thread{                    public void run(){                            Looper.prepare(); //创建该线程的Looper对象用于接收消息                            //注意了这里的handler是定义在主线程中的哦呵呵                            //前面看到直接使用了handler对象是不是在找在什么地方实例化的呢                            //现在看到了吧呵呵开始的时候实例化不了因为该线程的Looper对象                            //还不存在呢。现在可以实例化了                            //这里Looper.myLooper()获得的就是该线程的Looper对象了                            handler new ThreadHandler(Looper.myLooper());                            //这个方法有疑惑吗                            //其实就是一个循环循环从MessageQueue中取消息。                            //不经常去看看你怎么知道你有新消息呢                            Looper.loop();                     }                    //定义线程类中的消息处理类                    class ThreadHandler extends Handler{                            public ThreadHandler(Looper looper){                                    super(looper);                            }                            public void handleMessage(Message msg){                                    //这里对该线程中的MessageQueue中的Message进行处理                                    //这里我们再返回给主线程一个消息                                    handler new MyHandler(Looper.getMainLooper());                                    Message msg2 handler.obtainMessage(1,1,1,子线程收到:(String)msg.obj);                                    handler.sendMessage(msg2);                            }                    }            }    } 4、其他线程给自己发送Message    public class MainActivity extends Activity {            private Button btnTest;            private TextView textView;            private Handler handler;            Override            public void onCreate(Bundle savedInstanceState) {                    super.onCreate(savedInstanceState);                    setContentView(R.layout.main);                    btnTest (Button)this.findViewById(R.id.btn_01);                    textView (TextView)this.findViewById(R.id.view_01);                    btnTest.setOnClickListener(new View.OnClickListener() {                            Override                            public void onClick(View arg0) {                                    //启动线程                                    new MyThread().start();                                    }                    });            }            class MyHandler extends Handler{                    public MyHandler(Looper looper){                            super(looper);                    }                    public void handleMessage(Message msg){                            super.handleMessage(msg);                            textView.setText((String)msg.obj);                    }            }                    class MyThread extends Thread{                    public void run(){                            Looper.prepare(); //创建该线程的Looper对象                            //这里Looper.myLooper()获得的就是该线程的Looper对象了                            handler new ThreadHandler(Looper.myLooper());                            Message msg handler.obtainMessage(1,1,1,我自己);                            handler.sendMessage(msg);                            Looper.loop();                     }                    //定义线程类中的消息处理类                    class ThreadHandler extends Handler{                            public ThreadHandler(Looper looper){                                    super(looper);                            }                            public void handleMessage(Message msg){                                    //这里对该线程中的MessageQueue中的Message进行处理                                    //这里我们再返回给主线程一个消息                                    //加入判断看看是不是该线程自己发的信息                                    if(msg.what 1 msg.obj.equals(我自己)){                                            handler new MyHandler(Looper.getMainLooper());                                            Message msg2 handler.obtainMessage(1,1,1,禀告主线程:我收到了自己发给自己的Message);                                            handler.sendMessage(msg2);                                                                    }                            }                    }            }    }    附注 上面四个例子的布局文件是同一个文件main.xml  ?xml:namespace prefix o ns urn:schemas-microsoft-com:office:office / ?xml version1.0 encodingutf-8?    LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android            android:rientationvertical            android:layout_widthfill_parent            android:layout_heightfill_parent                TextView    android:idid/view_01            android:layout_widthfill_parent             android:layout_heightwrap_content             android:textstring/hello            /    Button android:idid/btn_01             android:layout_widthfill_parent             android:layout_heightwrap_content             android:text测试消息 /    /LinearLayout 转载于:https://blog.51cto.com/haiyuanxi/957206
http://www.zqtcl.cn/news/303122/

相关文章:

  • 如何让自己做的网站可以播放歌曲做培训网站
  • 做网站的毕业设计网站没备案怎么做淘宝客
  • 百度申诉网站建设银行住房租赁代表品牌是什么
  • 网站初期推广方案虚拟服务器搭建wordpress
  • jeecms可以做网站卖吗山西网络推广专业
  • 2017 如何做网站优化育儿哪个网站做的好
  • 网站制作容易吗青岛网站建设公司报价
  • 淘宝建设网站的好处网站制作结构
  • 网站开发网站建设公司临沂网站建设找谁
  • 咋么做网站在电脑上潍坊免费模板建站
  • 苏州网站建设推广咨询平台做网站的公司图
  • 北京企业网站怎么建设免费给我推广
  • 网站制作价钱多少专业的咨询行业网站制作
  • 做百度网站每年的费用多少交换友情链接时需要注意的事项
  • 怎么在百度网站上做自己的网站百度开户渠道
  • php技术的网站建设实录方案做二手手机的网站有哪些
  • 做网站店铺装修的软件怎么做淘课网站
  • 百度一下官方网站wordpress连接代码
  • 什么网站详情页做的好仿唧唧帝笑话门户网站源码带多条采集规则 织梦搞笑图片视频模板
  • 平原网站建设费用少儿编程加盟店倒闭
  • 企业网站建设专业公司蜜淘app在那个网站做的
  • 市住房城乡建设部网站大学生课程设计网站
  • 广州大石附近做网站的公司外包服务公司是干什么的
  • 做的新网站网上搜不到做的网站百度搜索不出来的
  • 电商网站后台报价公司如何建站
  • 查网站有没有做推广企业网站建设的目标
  • 北京网站维护公司专业外贸网站建设_诚信_青岛
  • 网站自己做还是用程序制作网站一般使用的软件有哪些
  • 晨雷文化传媒网站建设济南互联网品牌设计
  • 怎样给自己的网站做防红连接梵客装饰公司官网