Android Runnable
Runnable 并不一定是新开一个线程,比如下面的调用方法就是运行在UI主线程中的:
Handler mHandler=new Handler(); mHandler.post(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub } });
官方对这个方法的解释如下,注意其中的:“The runnable will be run on the user interface thread. ”
boolean android.view.View .post(Runnable action)
Causes the Runnable to be added to the message queue. The runnable will be run on the user interface thread.
Parameters:
action The Runnable that will be executed.
Returns:
Returns true if the Runnable was successfully placed in to the message queue. Returns false on failure, usually because the looper processing the message queue is exiting.
我们可以通过调用handler的post方法,把Runnable对象(一般是Runnable的子类)传过去;handler会在looper中调用这个Runnable的Run方法执行。
Runnable是一个接口,不是一个线程,一般线程会实现Runnable。
这里我们看代码 mHandler.post(new Runnable(){ 好像是new 了一个 interface, 其实是new的一个实现Runnable的匿名内部类(Inner Anonymous Class),这是很简练的写法。
上面的代码可以看成是: new anonymousClass() implement interface{ [改写interface method]}
Runnable是一个接口,不是一个线程,一般线程会实现Runnable。 所以如果我们使用匿名内部类是运行在UI主线程的,如果我们使用实现这个Runnable接口的线程类,则是运行在对应线程的。
具体来说,这个函数的工作原理如下:
View.post(Runnable)方法。在post(Runnable action)方法里,View获得当前线程(即UI线程)的Handler,然后将action对象post到Handler里。在Handler里,它将传递过来的action对象包装成一个Message(Message的callback为action),然后将其投入UI线程的消息循环中。在Handler再次处理该Message时,有一条分支(未解释的那条)就是为它所设,直接调用runnable的run方法。而此时,已经路由到UI线程里,因此,我们可以毫无顾虑的来更新UI。
如下图,前面看到的代码,我们这里Message的callback为一个Runnable的匿名内部类
这种情况下,由于不是在新的线程中使用,所以千万别做复杂的计算逻辑。
Android Runnable相关推荐
- android runnable内存泄漏,这个Runnable可以防止内存泄漏吗?
我在Java中的总的初学者和已经创建了一个简单的Java的Android片断其中一个Runnable 1,5秒钟后,我改变TextView从Hello World到Hola Mundo.它工作正常,基 ...
- Android Runnable与Handler和Thread的使用,Handler构造方法弱引用实现
PS:在使用Runnable时,可能会内存泄露.Runnable是一个匿名内部类,因此它对当前Activity有一个隐式引用.如果Activity在销毁之前,任务还未完成, 那么将导致Activity ...
- 演化理解 Android 异步加载图片
引用:http://www.cnblogs.com/ghj1976/archive/2011/05/06/2038738.html 下面测试使用的layout文件: 简单来说就是 LinearLayo ...
- android多线程讲解与实例
本期的多线程主题与Android相关,侧重讲解在Android中如何用好多线程,需要你有Java的多线程基础. 首先我们思考几个问题,在Android应用中为什么要用多线程?为了解决哪些问题?或者为了 ...
- 蚂蚁开放平台开发第三方授权登陆(三):Android端
开发前提: 拥有支付宝账户登录授权业务入参pid值.拥有APPID.App支付宝登录功能并成功签约 一.需求 用户在APP点击登录后,选择第三方登录中的"支付宝",跳转到支付宝客户 ...
- android 异步加载图片总结
一Handler+Runnable模式 我们先看一个并不是异步线程加载的例子,使用 Handler+Runnable模式. 这里为何不是新开线程的原因请参看这篇文章:Android Runnable ...
- kivy html5,kivy 使用webview加载网页
from kivy.app import App from kivy.uix.widget import Widget from kivy.clock import Clock from jnius ...
- Android开发笔记之:Handler Runnable与Thread的区别详解
From:http://www.jb51.net/article/37465.htm 本篇文章是对在Android中Handler Runnable与Thread的区别进行了详细的分析介绍,需要的朋友 ...
- 【Android 异步操作】FutureTask 分析 ( Future 接口解析 | Runnable 接口解析 | Callable 接口解析 )
文章目录 一.Future 接口 1.Future 接口简介 2.取消任务方法 3.Future 接口源码注释 二.Callable 接口 三.Runnable 接口 上一篇博客 [Android 异 ...
最新文章
- ubuntu自动挂载NTFS的方法
- 面向对象的基本设计原则【转】
- Eclipse更改系统主题
- 关于安卓调用C#的WebService上传图片问题(不使用ksoap2)
- 【tensorflow】 GPU 显存分配设置
- 概率分布的熵归一化(Entropy Normalization)
- c语言中参数的传递方式是,C语言函数的参数及传递方式
- 《布莱克智讯之声》公众号文章汇总
- Linux IPC实践(10) --Posix共享内存
- excel值false 显示否_Python数据分析包pandas中也有Excel的IF这么简单实用函数
- IDEA(Pycharm)一家子常用快捷键Keymap对应的英文、中文与具体位置
- echarts数据可视化_Golang 数据可视化利器 go-echarts 开源啦
- 【Python】Python中的日志级别
- 关于Mac电脑更新IP地址的解决方法!
- C语言练习,求x的y次方的代码
- 基于Dlib库构建人脸识别数据集
- 桌面计算机休眠快捷键,电脑休眠唤醒快捷键
- Mac -- 插入移动硬盘后没有显示
- 【Unity TMP外部字体导入问题】TMP中文,将字体生成为TMP_FontAsset常见问题
- matlab正方形追及问题,行测常考题型讲解:环形相遇与追及问题