Handler post用法整理

来自:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=197324

感谢原作者.

/*
* 在这个demo中,整个过程如下:
   程序一启动,就把MyRunnable加入到消息队列中,
   android的handler是异步机制,
   所以在handler.post(new MyRunnable()); 
   之后,程序会继续执行,所以以后的语句会继续,
   这时候我们输出Oncreate中的当前线程ID
   同时MyRunnable的run方法也在运行,
   一样输出run方法中的当前线程ID,然后让线程休眠6秒 
*/
代码片段,双击复制
 
package xmren.handler.app;
import xmren.handlerdemo.app.R;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
public class HandlerdemoActivity extends Activity {
private Handler handler=new Handler();
private myrunnable runnable=new myrunnable();
/** Called  when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler.post(runnable);
System.out.println("Oncreate---The Thread id is :"+ Thread.currentThread().getId());
setContentView(R.layout.main);
}
}
程序运行结果
/*
* 程序的输出结果应该是
* 1:控制台的输出: Oncreate---The Thread id is :1
                              Runnable---The Thread is running
                              Runnable---The Thread id is :1
   2:程序启动后6秒,我们才看到main.xml中的内容(只有一个textview)
*/
<ignore_js_op>handler2.png 
/*
* 这2个结果都表明handler和主线程是同一个线程如果这时候你做的是一个耗时的操作(比如下载),
* 那么这样是不可行的看我们的下一个demo
*/

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

Demo2
/*
* 在这个demo中,用到了HandlerThread,
* 在HandlerThread对象中可以
* 通过getLooper方法获取一个Looper对象控制句柄,
* 我们可以将其这个Looper对象映射到一个Handler中去来实现一个线程同步机制
*/
代码片段,双击复制
 
package xmren.handlerdemo.app;
import xmren.handlerdemo.app.R;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
public class handlerdemo1 extends Activity
{
private Handler handler = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
HandlerThread handlerThread = new HandlerThread("myHandlerThread");
handlerThread.start();
handler = new Handler(handlerThread.getLooper());
handler.post(new MyRunnable());
System.out.println("Oncreate---The Thread id is :"+ Thread.currentThread().getId());
setContentView(R.layout.main);
}
}
程序运行结果
/*
* 1:控制台的输出: Oncreate---The Thread id is :1
                              Runnable---The Thread is running
                              Runnable---The Thread id is :2109
*/
结果截图
<ignore_js_op>
handler1.png

/**
     程序启动后,我们立刻看到main.xml中的内容
      这样就达到了多线程的结果。
*/
Demo中用到的myrunnable类
package xmren.handler.app;
代码片段,双击复制
 
public class myrunnable implements Runnable
{
@Override
public void run()
{
// TODO Auto-generated method stub
System.out.println("Runnable---The Thread is running");
System.out.println("Runnable---The Thread id is :"+ Thread.currentThread().getId());
try
{
Thread.sleep(6000);
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Demo源码下载:  handlerdemo.zip (46.48 KB, 下载次数: 43) 

=============================================================================================
同时, 找到百度知道上的一个问题(竟然还真一直有人在这里问IT的问题...中国木有stackoverflow真伤心(;′⌒`) )
在这里:http://zhidao.baidu.com/question/275665210.html
问题:
sureButton.setOnClickListener(new Button.OnClickListener(){
public void onClick(View view){
myHandler.post(new Runnable() {
public void run() {
getWeatherInfo();//耗时操作
analyzing();//耗时操作
setWeather();//更新UI
}
});
}
});
为什么这样写还是会阻塞掉。点了sureButton按钮之后,按钮会一直处于按下状态,
直到三个操作完成,才弹出来。。。


我的理解:当然是会阻塞的.这只是调用了runnable的run方法, 并没有新建一个线程,而是直接在UI线程里操作的.线程只有start()之后才会新建.
解决办法?当然是把耗时操作丢给新的线程去做了.

最佳回答:
1.试下用postDelayed(Runnable a, int time),因为post把消息放到Looper中就返回,但Looper中没有其他消息又会被立刻取出来执行,这样就有可能做了run中的操作,而没有及时刷新按钮.

2.另外,这种做法耗时操作仍然是由UI线程去做了。。而不是你想的另起了线程。。
建议最好用下面的方法:
定义一个线程。
class MyThread extends Thread{
Handler mHandler;
Boolean boo;
public MyThread(Handler handler){
mHandler = handler;
}
public void setBoo(boolean b) {boo = b; }
publid void run(){
if(boo){
getWeatherInfo();//耗时操作
analyzing();//耗时操作
mHandler.post(new Runnable() {
public void run() {
setWeather();//更新UI
}
);//更新UI
boo = true;
}
}
}

在处理单击事件时:
sureButton.setOnClickListener(new Button.OnClickListener(){
public void onClick(View view){
setBoo(true);
myThread.start();
}
});

在activity中:
MyThread myThread = new MyThread(mHandler);



转载于:https://www.cnblogs.com/elefish/archive/2013/01/31/2888178.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zabbix华为交换机模板_【教程】思科交换机镜像端口配置实例

关注我&#xff0c;你的眼睛会怀孕镜像口就是把思科交换机上的其他口的数据流量全部转到一个口或者两个口上&#xff0c;通常被用作排查问题或者获取数据流量。下面简单介绍下怎么配置源目的镜像口吧。1、使用telnet或者ssh连接到交换机上&#xff0c;可以使用连接工具&#xf…

linux中死锁的概念,【Linux】死锁概念总结

什么是死锁如果一组进程(或者线程)中的所有进程(或者线程)都在等待该组中其他进程(或者线程)才能引发的事件&#xff0c;那么这组进程(或者线程)就是死锁的死锁出现的情况举例(1)线程自锁&#xff0c;自己将自己锁住当进程(线程)第一次访问一个资源时&#xff0c;对该资源进行加…

revo uninstaller pro 序列号_iPhone12/pro已下架,在天猫

苹果10月份发布的首款5G版iPhone手机iPhone12系列手机一共有四款不同的型号分别为iPhone12 mini&#xff0c;iPhone12&#xff0c;iPhone12 Pro以及iPhone12 Promax。其中iPhone12以及iPhone12 Pro已经正式开始发售了&#xff0c;作为首款5G版iPhone手机&#xff0c;iPhone12系…

大话数据结构文摘

第1章 数据结构绪论 程序设计数据结构算法 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合 1.逻辑结构 &#xff1a;是指数据对象中数据元素之间的相互关系 a&#xff1a;集合结构 b&#xff1a;线性结构 c&#xff1a;树形结构 d&#xff1a;图形结构 2.物理结…

vue打包代码反编译_Android逆向反编译代码注入APK过程思路分析

一、名称解释逆向 - 是一种产品设计技术再现过程&#xff0c;从可运行的程序系统出发&#xff0c;运用解 密、反汇编、系统分析等多种计算机技术&#xff0c;对软件的结构、流程、算法、 代码等进行逆向拆解和分析&#xff0c;推导出软件产品的源代码、设计原理、结构、 算法、…

android 好玩的ui,让安卓更好玩 这些Launchers值得拥有

【手机中国新闻】如果你对Android的布局和界面越来越厌倦&#xff0c;那么是时候安装一个新的启动程序了。Launchers可以让你定制带有主题和图标包的智能手机&#xff0c;还可以在切换屏幕、启动应用程序等操作时&#xff0c;几乎完全控制手机的性能。以下是安卓智能手机或平板…

微星主板rgb_虽然这块主板价格有点小贵,但用过之后,感觉还是可以接受的

其实这块主板并不算贵&#xff0c;但它与其它型号&#xff0c;其它品牌的丐中丐主板相比&#xff0c;的确要贵好二、三百多元。对于有些用户而言&#xff0c;贵这几百元&#xff0c;完全就是一种赤裸裸的抢钱行为&#xff0c;所以早就在心里打上了“不值”的标签。能用丐中丐的…

三层架构学习的困难_“网工起航计划”3天集训营 带你了解大型企业网络架构设计!...

点击蓝字关注我们网工起航计划3天集训营 带你了解大型企业网络架构设计开营时间&#xff1a;8月26日晚8点DAY1&#xff1a;企业园区网二层架构冗余设计实战 时间:8月26日20:00-21:301、网络通信过程详细解析2、交换机工作原理详解3、企业园区网二层架构冗余设计涉及技术点&a…

mvn 汇编_2020年简单的早安共勉句子短信汇编58条

2020年简单的早安共勉句子短信汇编58条爱情&#xff0c;就像两个人在拉猴皮筋&#xff0c;疼的永远是后撒手的那个。早安&#xff01;以下是小编为大家推荐的早安共勉句子58条,欢迎大家借鉴与参考&#xff0c;希望对大家有所帮助。1、这地球少了谁都照样转&#xff0c;就是少了…

华为p50预装鸿蒙系统,华为P50系列将至,内部测试预装鸿蒙系统,还有4款重磅新品将发布...

2021年的上半年旗舰手机发布时间相较往年提前很多&#xff0c;小米11甚至赶在2020年12月份就带着骁龙888处理器强势登场&#xff0c;随后包括iQOO7、vivo X60 Pro系列、realme GT、Redmi K40系列以及众多国产新旗舰机型相继登场&#xff0c;如今包括OPPO、一加科技等厂商也已经…

ASP.NET中的Menu控件的应用

1、首先建立一个Default.aspx的主页面&#xff0c;再建立一个站点地图&#xff1a;Web.sitemap 2、Default.aspx的主页面的设计 <% Page Language"C#" AutoEventWireup"true" CodeBehind"Default.aspx.cs" Inherits"Menu控件1.Default&q…

synchronized原理_synchronized 关键字底层原理

synchronized 关键字底层原理属于 JVM 层面。① synchronized 修饰同步语句块public class SynchronizedDemo {public void method() {synchronized (this) {System.out.println("synchronized 代码块");}} }通过 JDK 自带的 javap 命令查看 SynchronizedDemo 类的相…

滑动窗口机制

(1).窗口机制 滑动窗口协议的基本原理就是在任意时刻&#xff0c;发送方都维持了一个连续的允许发送的帧的序号&#xff0c;称为发送窗口&#xff1b;同时&#xff0c;接收方也维持了一个连续的允许接收的帧的序号&#xff0c;称为接收窗口。发送窗口和接收窗口的序号的上下…

第一学期《计算机网络》作业一_新学期学习计划合集5篇-其他范文

[前言]新学期学习计划共含5篇&#xff0c;由好范文网的会员投稿推荐&#xff0c;小编希望以下多篇范文对你的学习工作能带来参考借鉴作用。第1篇&#xff1a;新学期学习计划这篇新学期学习计划范文是我们精心挑选的&#xff0c;但愿对你有参考作用。说来惭愧&#xff0c;上课好…

Java概览(java语言编程艺术笔记)

Java入门&#xff08;1&#xff09;——注释&#xff0c;面向对象&#xff0c;问题分解 注释 简单程序里广泛注释显然是愚蠢的&#xff0c;但是设计更大的&#xff0c;更复杂的程序是一种非常有用的记录。 面向对象 扩展类的实例同时也是现有类的实例。 这个怎么理解&#xff1…

鸿蒙os开源邀请全球开发者,全场景无缝连接 鸿蒙OS开源邀请全球开发者共助生态发展...

原标题&#xff1a;全场景无缝连接 鸿蒙OS开源邀请全球开发者共助生态发展万众瞩目之下&#xff0c;鸿蒙OS终究还是亮相了。在今日开始的华为开发者大会(HDC)上&#xff0c;我们熟悉的消费者业务CEO余承东首个登场&#xff0c;在回顾了华为消费者业务之后&#xff0c;余承东话题…

java 内嵌调用_Java高级开发必会的50个性能优化的细节(珍藏版)

在JAVA程序中&#xff0c;性能问题的大部分原因并不在于JAVA语言&#xff0c;而是程序本身。养成良好的编码习惯非常重要&#xff0c;能够显著地提升程序性能。● 1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担&#xff0c;缩短加载的时间&#xff0c;提高加载的效率…

SDL教程4——在VS2010中设置SDL扩展库

前几节我们了解到&#xff0c;SDL基本库只能加载普通的BMP图像&#xff0c;如果我们还想加载其它格式的图片&#xff0c;我们就需要用到SDL的扩展库&#xff0c;它可以帮助我们加载BMP, PNM, XPM, LBM, PCX, GIF, JPEG, TGA and PNG等格式图片。要下载SDL扩展帮助文档&#xff…

html居右显示语言设置,iOS开发:纯代码设置UIButton文字居左或者居右显示

UIButton这个控件使用&#xff0c;作为资深的iOS开发人员来说是小儿科&#xff0c;但是有些时候还是需要记录一下UIButton的一些其他用法&#xff0c;这样方便快速解决实际问题。比如UIButton的纯代码编程的时候&#xff0c;设置文字居左显示&#xff0c;这个问题虽然简单的不能…

联想一体机电源键不亮_联想电脑一体机B505拆机经验

我修复联想电脑一体机的经验分享退休之后我较多的时间就是使用电脑&#xff0c;上上网&#xff0c;玩玩游戏&#xff0c;更多的是用电脑使用ps修图&#xff0c;修整照片。同时给自己的书法作品美化美化。很是方便。我这台b505的电脑&#xff0c;整体配置不错&#xff0c;就是一…