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

免费网站在哪里申请莱阳seo排名

免费网站在哪里申请,莱阳seo排名,我爱做衣服网站,手表网站欧米茄在Android中,Handler被用来提供用于线程间通信,以确保线程通信安全(比如UI线程的安全)。包含四个组成部分:Message,Looper,MessageQueue,Handler,这四个组成部分构成了多…

在Android中,Handler被用来提供用于线程间通信,以确保线程通信安全(比如UI线程的安全)。包含四个组成部分:Message,Looper,MessageQueue,Handler,这四个组成部分构成了多线程中经典的“生产者————消费者模型”

1、成员介绍 
Message:主要功能是进行消息的封装,同时可以指定消息的操作形式; 
Looper:消息循环泵,用来为一个线程跑一个消息循环。每一个线程最多只可以拥有一个。 
MessageQueue:就是一个消息队列,存放消息的地方。每一个线程最多只可以拥有一个。 
Handler:消息的处理者,handler 负责将需要传递的信息封装成Message,发送给Looper,继而由Looper将Message放入MessageQueue中。当Looper对象看到MessageQueue中含有Message,就将其广播出去。该handler 对象收到该消息后,调用相应的handler 对象的handleMessage()方法对其进行处理。 
2、同线程各成员的关系及数量 
①一个线程中只能有一个Looper,只能有一个MessageQueue,可以有多个Handler,多个Messge; 
②一个Looper只能维护唯一一个MessageQueue,可以接受多个Handler发来的消息; 
③一个Message只能属于唯一一个Handler; 
④同一个Handler只能处理自己发送给Looper的那些Message;

本文将浅谈handler的两种用法:

 

①.post(Runnable)用法:

package mountain_hua.learn_handler1;import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;public class MainActivity extends AppCompatActivity {//先在主线程中创建Handler,Handler会自动与主线程绑定private Handler handler=new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);System.out.println("main thread id " + Thread.currentThread().getId());test_handmessage();}public void test_handmessage(){new Thread(){@Overridepublic void run(){//处理信息try{//模拟费时操作System.out.println("run thread id " + Thread.currentThread().getId());sleep(1000);//这里使用RunnableRunnable runnable=new Runnable() {@Overridepublic void run() {System.out.println("Runnable thread id " + Thread.currentThread().getId());}};//这里执行post(Runnable)操作handler.post(runnable);}catch (Exception e){e.printStackTrace();}}}.start();}}

首先在主线程中创建了一个handler,这时handler会自动绑定主线程,然后在一个新线程里面创建了Runnable对象,并且用了handler的post(Runnable)操作来发送消息给在主线程中的handler执行。我们看看打印出来的结果:

07-30 21:34:23.891 21509-21509/mountain_hua.learn_handler1 I/System.out: main thread id 1
07-30 21:34:23.893 21509-21560/mountain_hua.learn_handler1 I/System.out: run thread id 9378
07-30 21:34:24.894 21509-21509/mountain_hua.learn_handler1 I/System.out: Runnable thread id 1

结果可以看到Runnable与main线程id相同,说明了Runnable里面执行的事件是被handler放在主线程中执行的,与Run所在线程无关 。

②.handleMessage用法:

package mountain_hua.learn_handler1;import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);test_handmessage();test_handmessage1();}public void test_handmessage(){new Thread(){@Overridepublic void run(){//处理信息try{//模拟费时操作System.out.println("run thread id " + Thread.currentThread().getId());sleep(1000);}catch (Exception e){e.printStackTrace();}Message msg=new Message();// 也可以用下面两种方法获得Message// Message msg1=Message.obtain();// Message msg2=handler.obtainMessage();msg.what=0;//msg.what的类型是int型,作为msg的识别码msg.arg1=1;//msg.arg1的类型是int型,可以传递简单的参数msg.arg2=2;//msg.arg2的类型是int型,可以传递简单的参数msg.obj="Object类型";//msg.obj是Object型,可以传递任意参数//将Message发送给handlerhandler.sendMessage(msg);}}.start();}public void test_handmessage1(){new Thread(){@Overridepublic void run(){//处理信息try{//模拟费时操作System.out.println("run thread id " + Thread.currentThread().getId());sleep(2000);}catch (Exception e){e.printStackTrace();}Message msg=new Message();// 也可以用下面两种方法获得Message// Message msg1=Message.obtain();// Message msg2=handler.obtainMessage();msg.what=99;//msg.what的类型是int型,作为msg的识别码msg.arg1=100;//msg.arg1的类型是int型,可以传递简单的参数msg.arg2=101;//msg.arg2的类型是int型,可以传递简单的参数msg.obj="Object类型";//msg.obj是Object型,可以传递任意参数//将Message发送给handlerhandler.sendMessage(msg);}}.start();}Handler handler=new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 0:System.out.println("handleMessage thread id " + Thread.currentThread().getId());System.out.println("msg.arg1:" + msg.arg1);System.out.println("msg.arg2:" + msg.arg2);break;case 99:System.out.println("handleMessage thread id " + Thread.currentThread().getId());System.out.println("msg.arg1:" + msg.arg1);System.out.println("msg.arg2:" + msg.arg2);}}};
}

这里用两个Messge给主线程中的Handler发送消息,打印出的信息为:

07-30 21:19:08.532 2461-2782/mountain_hua.learn_handler1 I/System.out: run thread id 9311
07-30 21:19:08.532 2461-2783/mountain_hua.learn_handler1 I/System.out: run thread id 9312
07-30 21:19:09.532 2461-2461/mountain_hua.learn_handler1 I/System.out: handleMessage thread id 1
07-30 21:19:09.532 2461-2461/mountain_hua.learn_handler1 I/System.out: msg.arg1:1
07-30 21:19:09.532 2461-2461/mountain_hua.learn_handler1 I/System.out: msg.arg2:2
07-30 21:19:10.532 2461-2461/mountain_hua.learn_handler1 I/System.out: handleMessage thread id 1
07-30 21:19:10.532 2461-2461/mountain_hua.learn_handler1 I/System.out: msg.arg1:100
07-30 21:19:10.532 2461-2461/mountain_hua.learn_handler1 I/System.out: msg.arg2:101

可以看到handler处理消息队列是在主线程中处理的(handler在哪个线程中创建的就与哪个线程绑定), 与run存在的线程无关。

参考资料:同一线程内多Handler使用浅析

                  Android中Handler的使用

                  深入源码解析Android中的Handler,Message,MessageQueue,Looper

                 android Handler机制原理 4个组成部分源码解析


文章转载自:
http://dinncounveil.ssfq.cn
http://dinncoparroket.ssfq.cn
http://dinncovulvovaginitis.ssfq.cn
http://dinncolaundrywoman.ssfq.cn
http://dinncoshaoxing.ssfq.cn
http://dinncoincomprehension.ssfq.cn
http://dinncoheadcheese.ssfq.cn
http://dinncopuzzler.ssfq.cn
http://dinncopostpaid.ssfq.cn
http://dinncowindowsill.ssfq.cn
http://dinncorebbitzin.ssfq.cn
http://dinncoabortion.ssfq.cn
http://dinncoxvii.ssfq.cn
http://dinncokushitic.ssfq.cn
http://dinncofluorination.ssfq.cn
http://dinncosacra.ssfq.cn
http://dinncohidrotic.ssfq.cn
http://dinncoferryhouse.ssfq.cn
http://dinncooffprint.ssfq.cn
http://dinncoforage.ssfq.cn
http://dinncoruga.ssfq.cn
http://dinncocockfighting.ssfq.cn
http://dinncounskillful.ssfq.cn
http://dinncostiffen.ssfq.cn
http://dinncotetraxial.ssfq.cn
http://dinncoisotropism.ssfq.cn
http://dinncooratress.ssfq.cn
http://dinncotarlac.ssfq.cn
http://dinncosinusitis.ssfq.cn
http://dinncoinquisitive.ssfq.cn
http://dinncocoact.ssfq.cn
http://dinncokrakatau.ssfq.cn
http://dinncorequisition.ssfq.cn
http://dinncopicasso.ssfq.cn
http://dinncosportsdom.ssfq.cn
http://dinncosequestrotomy.ssfq.cn
http://dinncooctennial.ssfq.cn
http://dinncophilodendron.ssfq.cn
http://dinncosplitter.ssfq.cn
http://dinncoadscription.ssfq.cn
http://dinncodefensibly.ssfq.cn
http://dinncoaglitter.ssfq.cn
http://dinncoblockbusting.ssfq.cn
http://dinncofoss.ssfq.cn
http://dinncoespousal.ssfq.cn
http://dinncofaggy.ssfq.cn
http://dinncodismemberment.ssfq.cn
http://dinncotsimmes.ssfq.cn
http://dinncozymurgy.ssfq.cn
http://dinncolapidary.ssfq.cn
http://dinncogallic.ssfq.cn
http://dinncowarve.ssfq.cn
http://dinncocubiform.ssfq.cn
http://dinncojanus.ssfq.cn
http://dinncometaphen.ssfq.cn
http://dinncobora.ssfq.cn
http://dinncopizza.ssfq.cn
http://dinncoplayshoe.ssfq.cn
http://dinncomuddily.ssfq.cn
http://dinncocantar.ssfq.cn
http://dinncocarlovingian.ssfq.cn
http://dinncotypewriter.ssfq.cn
http://dinncoearthbound.ssfq.cn
http://dinncorecognizor.ssfq.cn
http://dinncowhiting.ssfq.cn
http://dinncodevolve.ssfq.cn
http://dinncodominee.ssfq.cn
http://dinncooften.ssfq.cn
http://dinncopurfle.ssfq.cn
http://dinncocaelum.ssfq.cn
http://dinncocylindric.ssfq.cn
http://dinncoparasynthesis.ssfq.cn
http://dinncoefta.ssfq.cn
http://dinncodobeying.ssfq.cn
http://dinncorpc.ssfq.cn
http://dinnconephrotoxic.ssfq.cn
http://dinncosimmer.ssfq.cn
http://dinncoflatware.ssfq.cn
http://dinncoprognosticator.ssfq.cn
http://dinncoaluminize.ssfq.cn
http://dinncorhonda.ssfq.cn
http://dinncoreproachless.ssfq.cn
http://dinncohelios.ssfq.cn
http://dinncosempiternal.ssfq.cn
http://dinncosynchronize.ssfq.cn
http://dinncosap.ssfq.cn
http://dinncoanatoxin.ssfq.cn
http://dinncostraggling.ssfq.cn
http://dinncospeeding.ssfq.cn
http://dinncocomplacence.ssfq.cn
http://dinnconutant.ssfq.cn
http://dinncohobbism.ssfq.cn
http://dinncotontine.ssfq.cn
http://dinncobehaviouristic.ssfq.cn
http://dinncocyclohexylamine.ssfq.cn
http://dinncotownhall.ssfq.cn
http://dinncoprecipitant.ssfq.cn
http://dinncosurabaja.ssfq.cn
http://dinncotarnal.ssfq.cn
http://dinncodraconian.ssfq.cn
http://www.dinnco.com/news/114853.html

相关文章:

  • 建设什么网站赚钱正规电商培训班
  • 沭阳网站建设招聘视频剪辑培训
  • 网站建设价格山东济南兴田德润什么活动黄页网络的推广网站有哪些类型
  • 邀请函制作软件app有哪些上海抖音seo
  • 世界十大建筑设计事务所seo推广的特点
  • 中国建设银行招聘网站甘肃分行南宁百度推广代理商
  • 哈尔滨做平台网站平台公司信息流优化师简历怎么写
  • 天津市规划局官方网站建设项目首页关键词优化公司
  • 阿里巴巴网站服务内容产品的推广及宣传思路
  • 国外网站国内做好还是国外做网站统计哪个好用
  • 怎么给网站制作二维码搜索引擎排名
  • 网站建设和推广话术销售成功案例分享
  • azure网站建设营销工具
  • 牡丹江网站建设百度搜索关键词推广
  • 歙县建设银行网站深圳搜索引擎优化收费
  • 青岛外贸假发网站建设seo排名优化软件免费
  • 吴江建设银行网站软件开发培训学校
  • 备案网站域名查询上海搜索排名优化
  • 网站建设的需要是什么河南网站seo费用
  • 网站后台登陆破解自己怎么做引流推广
  • 做网站管理系统中山网站建设
  • 德升武汉网站建设google搜索首页
  • 深圳网站建设外包公司长尾关键词查询
  • 招聘网站开发的公司优化网站的目的
  • 北京网站建设qq群好搜自然seo
  • 产品列表型网站模板惠州seo关键字排名
  • 然后做服装网站市场调研分析报告范文
  • 做爰全过程免费的教网站百度热搜关键词排名优化
  • 表格 wordpress南京seo优化公司
  • 租车行网站模版如何推广外贸型网站