同学们一定遇到过这样的问题,在另一个类中处理好的数据,想要更新到主线程UI上
会发现更新失败,而在java平时编程中是可以的,其实这是安卓特有的规定,子线程不能直接将数据更新到主线程UI上,那么我们怎么做到去传递消息呢?
这里就要用到Handler 和Message了。这里我们建立一个实例看看怎么用,这里设置每隔1秒在主线程更新递增。
定义布局管理器:activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
主Activity函数代码:
public class MainActivity extends Activity { private static int count=0; public static final int SET=1;//之所以定义final,是因为在内部类也能使用,设置what标记 private TextView info=null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.info=(TextView)super.findViewById(R.id.info); Timer timer=new Timer();//定义调度器 timer.schedule(new MyTask(), 0,1000);//立即开始,每隔一秒增长 } /* * 设置一个Handler对象 */ private Handler myHandler=new Handler(){ public void handleMessage(android.os.Message msg){ switch(msg.what){//判断操作类型 case SET: MainActivity.this.info.setText("ee"+count++);//设置文本操作 } } }; /* * 定义定时调度的具体实现类,相当于子线程 */ private class MyTask extends TimerTask{ @Override public void run() { Message msg=new Message();//定义Message msg.what=SET;//类型 MainActivity.this.myHandler.sendMessage(msg);//发送消息 } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
实现效果如下:
相关推荐
使用处理程序延迟主线程上的工作;...我们看到,一个Message经由Handler的发送,MessageQueue的入队,Looper的抽取,又再一次地回到Handler的怀抱中。而绕的这一圈,也正好帮助我们将同步操作变成了异步操作。
主要对handler 、message机制进行了详解,如果想了解更多android相关知识,可以去我博客看看
在主线程即UI线程外,新建一个Looper线程,并用Messenger和Handler来处理message和posted runnable。程序中,在负线程中默认加了一个3s的线程等来,来帮助理解sent message和post runnable之间的同步机制。所以在按...
对于Android的Message机制主要涉及到三个主要的类,分别是Handler、Message、Looper;首先对每个类做一个简单介绍;然后再介绍所谓的Android的Message机制是如何实现的,最后给了一个示例。
android源码中包含了...android的消息处理有三个核心类: Looper,Handler和Message。 其实还有一个Message Queue(消息队列) , 但是MQ被封装到Looper里面了, 我们不会直接与 MQ打交道, 因此我没将其作为核心类。
消息机制背后有包括Looper ,MessageQueue管理和分发消息的实现,同时在Native层也单独实现了一套类 似的机制,接收和处理Native层的消息。Java层和Native层的消息循环是独立运行的,彼此的Message并不会 互通,...
安卓应用开发基础的消息处理机制分析。对应用工程师很有帮助。
摘要视图订阅标签: Android分类:目录(?Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系95220人
android的多线程消息处理机制核心成员handler,基本用法很简单,相关资料也很多。本例子给大家带来handler的奇葩用法,与大家一起分享。
Message(消息):需要被传递的消息,其中包含了消息标识(what),消息处理数据和处理对象(arg1,arg2,obj),发送该消息的Handler对象(target)等,由MessageQueue统一列队,最终由Handler处理。 MessageQueue(消息...
一说到Android的消息机制,自然就会联想到Handler,我们知道Handler是Android消息机制的上层接口,因此我们在开发过程中也只需要和Handler交互即可,很多人认为Handler的作用就是更新UI,这也确实没错,但除了更新UI...
Android消息处理机制,Handler的用处等的详细剖析
这篇文章写的非常好,深入...这不,前几天为了了解android的消息处理机 制,我看了Looper,Handler,Message这几个类的源码,结果又一次被googler的设计震撼了,特与大家分享。 android的消息处理有三个核心类:Looper
Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。 Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法...
先上图,让大家好理解下handler机制:handler机制示例图上面一共出现了几种类,ActivityThread,Handler,MessageQueue,Looper,msg(Message),对这些类作简要介绍:ActivityThread:程序的启动入口,为什么要介绍...
Android 是消息驱动的,实现消息驱动有几个要素...消息的表示: Message 消息队列: MessageQueue 消息循环,用于循环取出消息进行处理: Looper 消息处理,消息循环从消息队列中取出消息后要对消 息进行处理: Handler
从源码出发,详细的解析了android中的消息机制,分析清楚Looper和MessageQueue以及Handler三者之间的关系。
由于,不是很了解android下的Handler机制,没有深层次的编写诸如looper,MessageQueue。 将在下一个版本中加入MessageQueue机制,实现多任务后台处理相应。 具体使用请参考test包下的Handler使用事例。
android线程消息机制主要由Handler,Looper,Message和MessageQuene四个部分组成。平常在开发中,我们常用来在子线程中通知主线程来更新,其实整个安卓生命周期的驱动都是通过Handler(ActivityThread.H)来实现的。 ...
主要介绍了Android中Handler消息传递机制 的相关资料,需要的朋友可以参考下