`
158067568
  • 浏览: 327023 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

handler异步控制Runnable

阅读更多

 

1 关于改变ActivityTextView的方法

作者:Legend

qq158067568

Activity中的TextView如果直接写一个线程时时刷新,即调用TextViewsetText方法,那么程序不会报错,但是,TextView中的内容也不会改变。

1.1改变TextView中的内容

改变TextView中的内容可以通过HandlerHandlerAndroid中的消息发送器,其在哪个Activity中创建就属于且紧紧属于该Activity。还可以说其在哪个线程中new的,就是那个线程的Handler

如果想改变TextView中的内容,就要通过Handler来实现,比如想每秒钟更新一下时间,那么如下:

<!--[if !supportLists]-->(1)        <!--[endif]-->Activity中创建Handler

<!--[if !supportLists]-->(2)        <!--[endif]-->创建一个实现了Runnable接口的线程类

<!--[if !supportLists]-->(3)        <!--[endif]-->通过HandlerPost方法将Runnable添加进入消息队列

<!--[if !supportLists]-->(4)        <!--[endif]-->ok了。呵呵

代码

1       package rznh.zcl;
2       import android.app.Activity;
3       import android.os.Bundle;
4       import android.os.Handler;
5       import android.view.View;
6       import android.widget.Button;
7       import android.widget.TextView;
8       public class MyActivity extends Activity {
9           /** Called when the activity is first created. */
10              private Button butStart;
11              private Button butStop;
12              TextView tv;
13              int i=0;
14              Handler handler=new Handler();
15         @Override
16         public void onCreate(Bundle savedInstanceState) {
17             super.onCreate(savedInstanceState);
18             setContentView(R.layout.main);
19             /**
20              * Handler在那个Activity中new的就且仅属于那个Activity的
21              * */
22             //all by zcl qq158067568
23             butStart=(Button)findViewById(R.id.Button01);
24             butStop=(Button)findViewById(R.id.Button02);
25             tv=(TextView)findViewById(R.id.TextView01);
26             butStart.setOnClickListener(new View.OnClickListener() {
27                    @Override
28                    public void onClick(View v) {
29                             handler.post(runnable);
30                    }
31         });
32               butStop.setOnClickListener(new View.OnClickListener() {
33                           @Override
34                           public void onClick(View v) {
35                                    handler.removeCallbacks(runnable);
36                           }
37                  });
38         }
39         Runnable runnable=new Runnable(){
40    
41                       @Override
42                       public void run() {
43                                 tv.setText(String.valueOf(i++));
44                                 handler.postDelayed(runnable, 1000);
45                       }
46         };
47     } 
 

 

 

分享到:
评论
6 楼 sd6733531 2011-02-25  
Handler默认是主线程的。如果你用HandlerThread新开一个Handler线程,还是要受到“线程间不能互相访问”的限制。
更新UI还是用AsycnTask更加简单漂亮
5 楼 158067568 2011-02-24  
zhy20045923 写道
据我所知,settext会自动调用invaildate方法,会重新执行ondraw函数,不存在不会改变值的问题

朋友,你可以自己写一个demo,然后再另外一个线程中来改变ui,然后看看有没有反应。实践是检验真理的唯一标准
4 楼 ak121077313 2011-02-24  
是不需要调用invaildate,但是更新ui需要在主线程里面
3 楼 zhy20045923 2011-02-23  
据我所知,settext会自动调用invaildate方法,会重新执行ondraw函数,不存在不会改变值的问题
2 楼 158067568 2011-02-23  
ak121077313 写道
非常好,另外我想问下 这样写。性能怎么样?removeCallbacks是属于打断线程还是??

这个例子时为了演示handler调用runnable。removeCallbacks的作用是将在消息队列中指定的还未执行的元素删除。在本例中就是将runnable从消息队列中删除
1 楼 ak121077313 2011-02-23  
非常好,另外我想问下 这样写。性能怎么样?removeCallbacks是属于打断线程还是??

相关推荐

    Android ListView 异步加载图片

    3.就是把之前的new Thread改成了 Handler Looper Thread的模式,这样在第一次滑动的时候就进入了wait状态,又因为handler里面的runnable是队列执行的,所以handler一直在添加的runnable也在等待,这样就避免了多次...

    android开发教程之handler异步更新ui

    调用Handler.post(Runnable r)方法,Runnable运行在UI所在线程,所以可以直接调用View.invalidate() 代码如下:packagecom.Test.androidtest; importandroid.app.Activity;importandroid.content.Context;importandroid...

    swt-async-handler-1.0

    你需要做的就是,在异步线程中执行你的一部操作,当异步线程结束以后需要向handler发送一个消息;同时,你必须复写handler的handleMessage方法。 当handler接受但消息以后会根据你复写的方法去执行。 由于,不是很...

    深入理解Android中的Handler异步通信机制

    一、问题:在Android启动后会在新进程里创建一个主线程,也叫UI线程(非线程安全)这个线程主要负责监听屏幕点击...Handler可以把消息/Runnable对象发给Looper,由它把消息放入所属线程的消息队列中,然后Looper又会

    Thread、Handler和HandlerThread关系详解

    ,这个题目有点意思,对于很多人来说,可能对Thread和Handler很熟悉,主要涉及到Android的消息机制(Handler、Message、Looper、MessageQueue),详见《 从Handler.post(Runnable r)再一次梳理Android的消息机制(以及...

    Android Handler的作用与用法

    Handler是Android SDK来处理异步消息的核心类。 子线程与主线程通过Handler来进行通信。子线程可以通过Handler来通知主线程进行UI更新。 Handler是Android中引入的一种让开发者参与处理线程中消息循环的机制。每个...

    android handler.post和handler.sendMessage的区别和联系

    通过看源码发现,post这个方法是把任务r转成一个message放进了handler所在的线程中的messageQueue消息队列中,并且是立刻发送的消息,这样它既不是异步的也不是延时的,所以问题来了: 1. 它和sendMessage()有什么...

    Android多线程及异步处理问题详细探讨

    2)多线程实现方式implements Runnable 或 extends Thread 3)多线程核心机制是Handler 4)提供如下几种实现方式 —-1—–Handler ————————————说明1 创建一个Handler时一定要关联一个Looper实例,默认...

    线程使用方法

    1. 需求: (1)进入界面&gt;(2)下载图片&gt;(3... 在线程runnable执行方法下载数据完毕的时候,发送一个handler msg给异步消息,异步消息会进行处理 // 3. 测试代码: // (1). 可以使用gprs来进行测试,比较直观.wifi下载速度太快

    详解android异步更新UI的几种方法

    前言 我们知道在Android开发中不能在非ui线程中更新ui,但是,有的时候我们需要在代码中执行一些诸如访问网络、查询数据库等耗时操作,为了不阻塞ui线程,我们时常会开启一个新的线程... 使用handler(线程间通讯)

    android异步消息机制 源码层面彻底解析(1)

    Handler、Message、Loopler、MessageQueen 首先看一下我们平常使用Handler的一个最常见用法。 Handler handler =new ... new Thread(new Runnable() { @Override public void run() { Message message = Messag

    Android异步消息处理机制实现原理详解

    消息处理机制主要对象:Looper,Handler,Message(还有MessageQueue和Runnable) Looper不断从MessageQueue消息队列中取出一个Message,然后传给Handle,如此循环往复,如果队列为空,那么它会进入休眠。 这些类的主要...

    android 面试2

     Handler:可以发布或者处理一个消息或者操作一个Runnable,通过Handler发布消息,消息将只会发送到与它关联的消息队列,然也只能处理该消息队列中的消息  Looper:是Handler和消息队列之间通讯桥梁,程序组件首先...

    Android知识点及重要代码合集 word文档

    18.1 使用Handler完成子线程发送消息和Runnable对象到主线程 250 18.2 使用Handler完成主线程发送消息到子线程 256 18.3内存泄露和内存溢出的区别以及引用的级别 260 18.4 使用软引用解决Handler内存泄漏问题 262 ...

    Java并发编程(学习笔记).xmind

    用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量 管理者一组虚拟的许可。acquire获得许可(相当于P操作),release释放许可(相当于V操作) 应用场景 (1)二值信号...

    spring security 参考手册中文版

    15.2.4 AsyncContext.start(Runnable) 129 15.2.5异步Servlet支持 130 15.3 Servlet 3.1+集成 131 15.3.1 HttpServletRequest#changeSessionId() 132 16.基本和摘要式身份验证 132 16.1 ...

    应用启动页自定义跳转计时器View Demo

    应用启动页自定义跳转计时器View Demo: CircleTextProgressbar.java: ... import android.content.Context; import android.content.res.ColorStateList;...import android.content.res.TypedArray;...

    jfinalpluginsjfinal-dreampie.zip

    public class AttackHandler extends Handler {  @Override  public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {  request ...

Global site tag (gtag.js) - Google Analytics