`
阅读更多

                             同学们一定遇到过这样的问题,在另一个类中处理好的数据,想要更新到主线程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;
	}

}

 实现效果如下:




 
 

  • 大小: 16 KB
  • 大小: 16.7 KB
0
1
分享到:
评论
4 楼 梳子不爱头发 2015-05-01  
砺雪凝霜 写道
可以看下handler的源码,可以深入理解下handler

嗯好
3 楼 砺雪凝霜 2015-05-01  
可以看下handler的源码,可以深入理解下handler
2 楼 梳子不爱头发 2015-05-01  
嗯嗯,主要为了实现一秒增加一个数的效果
1 楼 砺雪凝霜 2015-04-30  
完全没有必要去用定时器,仅仅有handler就可以实现

相关推荐

    android handlerMessage 消息机制

    使用处理程序延迟主线程上的工作;...我们看到,一个Message经由Handler的发送,MessageQueue的入队,Looper的抽取,又再一次地回到Handler的怀抱中。而绕的这一圈,也正好帮助我们将同步操作变成了异步操作。

    android多线程handler/message机制详解

    主要对handler 、message机制进行了详解,如果想了解更多android相关知识,可以去我博客看看

    Android Handler Looper Message 使用示例

    在主线程即UI线程外,新建一个Looper线程,并用Messenger和Handler来处理message和posted runnable。程序中,在负线程中默认加了一个3s的线程等来,来帮助理解sent message和post runnable之间的同步机制。所以在按...

    Android的Message机制(Handler、Message、Looper)

    对于Android的Message机制主要涉及到三个主要的类,分别是Handler、Message、Looper;首先对每个类做一个简单介绍;然后再介绍所谓的Android的Message机制是如何实现的,最后给了一个示例。

    android的消息处理机制(图+源码分析)——Looper,Handler,Message

    android源码中包含了...android的消息处理有三个核心类: Looper,Handler和Message。 其实还有一个Message Queue(消息队列) , 但是MQ被封装到Looper里面了, 我们不会直接与 MQ打交道, 因此我没将其作为核心类。

    Handler机制及原理探究.pdf

    消息机制背后有包括Looper ,MessageQueue管理和分发消息的实现,同时在Native层也单独实现了一套类 似的机制,接收和处理Native层的消息。Java层和Native层的消息循环是独立运行的,彼此的Message并不会 互通,...

    Android 之 Looper、MessageQueue、Handler 与消息循环

    安卓应用开发基础的消息处理机制分析。对应用工程师很有帮助。

    Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系 - Hongyang -

    摘要视图订阅标签: Android分类:目录(?Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系95220人

    Android handler message奇怪用法详解

    android的多线程消息处理机制核心成员handler,基本用法很简单,相关资料也很多。本例子给大家带来handler的奇葩用法,与大家一起分享。

    Handler+Looper+MessageQueue+Message机制

    Message(消息):需要被传递的消息,其中包含了消息标识(what),消息处理数据和处理对象(arg1,arg2,obj),发送该消息的Handler对象(target)等,由MessageQueue统一列队,最终由Handler处理。 MessageQueue(消息...

    深入Android Handler,MessageQueue与Looper关系

    一说到Android的消息机制,自然就会联想到Handler,我们知道Handler是Android消息机制的上层接口,因此我们在开发过程中也只需要和Handler交互即可,很多人认为Handler的作用就是更新UI,这也确实没错,但除了更新UI...

    handler消息机制完整版

    Android消息处理机制,Handler的用处等的详细剖析

    android的消息处理机制(图文+源码分析)—Looper/Handler/Message

    这篇文章写的非常好,深入...这不,前几天为了了解android的消息处理机 制,我看了Looper,Handler,Message这几个类的源码,结果又一次被googler的设计震撼了,特与大家分享。 android的消息处理有三个核心类:Looper

    Android消息处理机制Looper和Handler详解

    Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。 Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法...

    Android的Handler机制实现原理分析

    先上图,让大家好理解下handler机制:handler机制示例图上面一共出现了几种类,ActivityThread,Handler,MessageQueue,Looper,msg(Message),对这些类作简要介绍:ActivityThread:程序的启动入口,为什么要介绍...

    [Hasen图示系列]android中handler机制

    Android 是消息驱动的,实现消息驱动有几个要素...消息的表示: Message 消息队列: MessageQueue 消息循环,用于循环取出消息进行处理: Looper 消息处理,消息循环从消息队列中取出消息后要对消 息进行处理: Handler

    android 消息机制

    从源码出发,详细的解析了android中的消息机制,分析清楚Looper和MessageQueue以及Handler三者之间的关系。

    swt-async-handler-1.0

    由于,不是很了解android下的Handler机制,没有深层次的编写诸如looper,MessageQueue。 将在下一个版本中加入MessageQueue机制,实现多任务后台处理相应。 具体使用请参考test包下的Handler使用事例。

    android线程消息机制之Handler详解

    android线程消息机制主要由Handler,Looper,Message和MessageQuene四个部分组成。平常在开发中,我们常用来在子线程中通知主线程来更新,其实整个安卓生命周期的驱动都是通过Handler(ActivityThread.H)来实现的。 ...

    Android中Handler消息传递机制

    主要介绍了Android中Handler消息传递机制 的相关资料,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics