handlerthreadAsyncTask和Thread加Handler的区别

handlerthread  时间:2021-06-19  阅读:()

程序Android中Handler和Timer还有Thread的最大区别是什么?

handler是android特有的机制,最大的好处就是实现了Activity主线程(就是UI主线程)和其他线程(自己定义的Thread)之间的数据通信。

Timer和Thread是实现多线程的,而handler是实现线程间通信的,二者很大不同,关于handler的用法,参考baidu搜索。





哪位高手用到过IntentService这个玩意,能否给一个应用场景

继承service的抽象类   abstract class IntentService extends Service   在onCreate里面起了一个线程   HandlerThread thread = new HandlerThread("IntentService[" + mName + "]"); thread.start();   然后用thread的looper起了一个Handler   mServiceLooper = thread.getLooper(); mServiceHandler = new ServiceHandler(mServiceLooper);   在onStart里面,将启动的Intent交给ServiceHandler处理   @Override public void onStart(Intent intent, int startId) { Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; msg.obj = intent; mServiceHandler.sendMessage(msg); }   在ServiceHandler的handleMessage里面交给抽象方法onHandleIntent处理start的消息   @Override public void handleMessage(Message msg) { onHandleIntent((Intent)msg.obj); Self(msg.arg1); } protected abstract void onHandleIntent(Intent intent);   在onHandleIntent完了Self   整个看下来是一个Service+Thread+handle的结合体,   Service:比Activity的被kill的级别低   Thread:不阻塞UI线程   Handle:队列式的消息循环   那这个玩意的使用场景会是什么样的?由于所有的任务都在同一个Thread looper里面来做,所以不符合多个数据同时请求的场景。

最佳场景是做离线数据下载,把所有的任务都往这个Service里面扔就可以了。

Android中的Handler详解以及和Thread的区别

handler主要用于线程间通信,举一个常见的场景,在一个新开的thread中请求网络,等待网络请求成功后更新界面。

此时,由于更新UI的操作不能在新开的thread中完成,需要handler发送消息到主线程中来执行。

例如:new Thread(new Runnable(){ @override public void run(){ Object result=queryWeather(); Message message = handler.obtainMessage(); message.obj = result; handler.sendMessage(0); } }).start(); 在主线程中定义handler,Handler handler = new Handler(){ @override public void handleMessage(Message msg){ switch(msg.what){ case 0: //此处为收到thread发来的消息,在此更新textView textView.setText(msg.obj.getContent()); break; } } } 大概就是这个用途,手敲的代码可能会有错误,意思应该明白

如何关闭android中的HandlerThread

android 中的HandlerThread包含了android中的消息处理机制必须的looper,当你启动这个线程的时候,就会闯进looper,并开启消息处理的循环。

跟其它线程一样,HandlerThread是可不可以直接掉的,不过经过本人测试,你可以调用:getLooper().quit();来退出这个线程,其实原理很简单,就是改变在消息循环里面标志位,退出整个while循环,使线程执行完毕。

部分 测试代码如下: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv_name = (TextView) findViewById(_name); btn_name = (Button) findViewById(R.id.btn_name); Log.i(TAG, "==================main thread:" + Thread.currentThread().getName()); final HandlerThread thread = new HandlerThread("handlerThread"); thread.start(); final MyHandler handler = new MyHandler(thread.getLooper()); btn_name.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) { handler.sendEmptyMessage(1);try {Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace();}thread.getLooper().quit();}});} class MyHandler extends Handler { public MyHandler(Looper looper) { super(looper);}@Overridepublic void handleMessage(Message msg) { Log.i(TAG, "==================" + Thread.currentThread().getName()); /_name.setText("hello, this is the first message from handler"); 不过要注意:要想更新界面内容,还是需要使用界面的Looper,不然的话还是会抛错误,还是那句话,所有跟改变界关的操作,都得通过界面的Looper来执行

AsyncTask和Thread加Handler的区别

没错,我现在发现这样一个问题我在处理下载的时候service中new 多个thread的话,如果个数比较多,就容易死掉某些线程,甚至崩溃,偶尔可能产生ANR。

如果是asynctask的话,就没有这个情况。

onevps:新增(支付宝+中文网站),香港/新加坡/日本等9机房,1Gbps带宽,不限流量,仅需$4/月

onevps最新消息,为了更好服务中国区用户:1、网站支付方式新增了支付宝,即将增加微信;原信用卡、PayPal方式不变;(2)可以切换简体中文版网站,在网站顶部右上角找到那个米字旗,下拉可以换中国简体版本。VPS可选机房有:中国(香港)、新加坡、日本(东京)、美国(纽约、洛杉矶)、英国(伦敦)、荷兰(阿姆斯特丹)、瑞士(苏黎世)、德国(法兰克福)、澳大利亚(悉尼)。不管你的客户在亚太区域、美洲区...

tmhhost:暑假快乐,全高端线路,VPS直接8折,200G高防,美国gia日本软银韩国cn2香港cn2大带宽

tmhhost为2021年暑假开启了全场大促销,全部都是高端线路的VPS,速度快有保障。美国洛杉矶CN2 GIA+200G高防、洛杉矶三网CN2 GIA、洛杉矶CERA机房CN2 GIA,日本软银(100M带宽)、香港BGP直连200M带宽、香港三网CN2 GIA、韩国双向CN2。本次活动结束于8月31日。官方网站:https://www.tmhhost.com8折优惠码:TMH-SUMMER日本...

80VPS:香港服务器月付420元;美国CN2 GIA独服月付650元;香港/日本/韩国/美国多IP站群服务器750元/月

80vps怎么样?80vps最近新上了香港服务器、美国cn2服务器,以及香港/日本/韩国/美国多ip站群服务器。80vps之前推荐的都是VPS主机内容,其实80VPS也有独立服务器业务,分布在中国香港、欧美、韩国、日本、美国等地区,可选CN2或直连优化线路。如80VPS香港独立服务器最低月付420元,美国CN2 GIA独服月付650元起,中国香港、日本、韩国、美国洛杉矶多IP站群服务器750元/月...

handlerthread为你推荐
旺旺群发手机旺旺怎么群发信息?存储区域网络网络存储怎么用?是接在路由器上面吗?存储区域网络nas、das、san 三种网络环境的区分excel大写金额怎么用Excel将小写金额转换成人民币的大写金额pat是什么格式怎么将自己做的PS图片保存为PAT格式?上行宽带上行宽带和下行宽带什么意思averagesPoisson-Arrivals-See-Time-Averages是什么意思音乐代码网页中怎么写自动播放mp3音乐的代码网站客服代码如何将在线客服代码插入到您的网页中?网站客服代码在线客服系统的代码添加到网站中,要怎么做?
长沙虚拟主机 河南vps 免费cn域名 enzu site5 标准机柜尺寸 宁波服务器 cdn加速是什么 台湾谷歌 万网主机管理 路由跟踪 php服务器 腾讯数据库 卡巴斯基试用版下载 美国vpn代理 远程登录 连连支付 stealthy 1000元电脑主机配置 北京自住房申请网站 更多