杂文总结--2
2014-05-12 22:47
330 查看
实现线程:继承Thread类或者实现Runnable接口
由于Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。
handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),
Android系统的应用程序是消息驱动的,系统会为每一个应用程序配备一个消息队列,当应用程序运行的时候,该应用程序的主线程会不断的查看消息队列看看有没有消息要处理。
===================================================================
回调函数Run()执行完,线程终止,所以如果你要让线程不断的做一些耗时的事情的时候,你应该在回调函数里整一个循环。
===================================================================
创建线程的两种方法:
1.直接继承Thread,重写run()函数
Public class MyThread extends Thread{
@overridepublic void run(){
//线程的实现体}}
New MyThread().start();
2.实现接口Runnable
Public Class MyRunnable implements Runnable{
@overridepublic void run(){
//线程的实现体}
}
New Thread(new MyRunnable()).start();
两种方法的比较:其实两种方法从源码上来看本质是一样,都是调用了create(ThreadGroup group, Runnable runnable, String threadName, long stackSize)函数,只是两种方法再调用的时候传递的参数不一样,
直接继承Thread类的方法:create(null, null, threadName, 0);
实现Runnable接口的方法:create(group, runnable, threadName, 0);
主要区别在于第二个参数,如果为空表示线程的执行方法为继承Thread的类的回调函数run(),如果为runnable,表示线程的执行方法为Runnable的run()方法。
===================================================================
Android中更新UI的操作必须放在被更新的UI的Root线程中,即创建它的线程中。
Android提供了两种事件处理机制:基于监听器的事件处理、基于回调函数的事件处理。
Runnable 究竟是什么?
Runnable 其实只是一个普通的接口,它带有一个抽像函数run(),仅此而已。Runnable不是线程,只是我们可以使用Runnable来作为参数创建线程,我们知道创建线程的两种方法:一是MyThreadObject.start() 另外一种是Thread(MyRunnable).Start()。
因此来看下面的代码:
刚开始是的误解:1.handler 实现UI更新的原理2.创建labelTimer控件的线程是主线程,这里(划红线的部分)不是子线程来更新主线程创建的控件吗?怎么不会出错?
解答疑问一:Handler一直在main thread中执行,有一个不断循环的Looper,不断检索一个容器MessageQueue,这个容器,一旦有Message进来就去执行这个Message,如果这个Message有callback(一个Runnable,如果是handler.post(runnable)的话, 会生成一个Message对象,这个对象的callback参数被赋值成这个runnable对象),那么也去执行这个callback(也就是runnable对象)的run方法(这个就很类似我上面例子中的Test类中的Say方法了,仅仅只是调用这个run方法而已,不是去开线程).
解答疑问二:Runnable只是一个普通的接口,创建Runnable匿名内部类时这时候当前的线程还是主线程。
由于Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。
handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),
Android系统的应用程序是消息驱动的,系统会为每一个应用程序配备一个消息队列,当应用程序运行的时候,该应用程序的主线程会不断的查看消息队列看看有没有消息要处理。
===================================================================
回调函数Run()执行完,线程终止,所以如果你要让线程不断的做一些耗时的事情的时候,你应该在回调函数里整一个循环。
===================================================================
创建线程的两种方法:
1.直接继承Thread,重写run()函数
Public class MyThread extends Thread{
@overridepublic void run(){
//线程的实现体}}
New MyThread().start();
2.实现接口Runnable
Public Class MyRunnable implements Runnable{
@overridepublic void run(){
//线程的实现体}
}
New Thread(new MyRunnable()).start();
两种方法的比较:其实两种方法从源码上来看本质是一样,都是调用了create(ThreadGroup group, Runnable runnable, String threadName, long stackSize)函数,只是两种方法再调用的时候传递的参数不一样,
直接继承Thread类的方法:create(null, null, threadName, 0);
实现Runnable接口的方法:create(group, runnable, threadName, 0);
主要区别在于第二个参数,如果为空表示线程的执行方法为继承Thread的类的回调函数run(),如果为runnable,表示线程的执行方法为Runnable的run()方法。
===================================================================
Android中更新UI的操作必须放在被更新的UI的Root线程中,即创建它的线程中。
Android提供了两种事件处理机制:基于监听器的事件处理、基于回调函数的事件处理。
Runnable 究竟是什么?
Runnable 其实只是一个普通的接口,它带有一个抽像函数run(),仅此而已。Runnable不是线程,只是我们可以使用Runnable来作为参数创建线程,我们知道创建线程的两种方法:一是MyThreadObject.start() 另外一种是Thread(MyRunnable).Start()。
因此来看下面的代码:
刚开始是的误解:1.handler 实现UI更新的原理2.创建labelTimer控件的线程是主线程,这里(划红线的部分)不是子线程来更新主线程创建的控件吗?怎么不会出错?
解答疑问一:Handler一直在main thread中执行,有一个不断循环的Looper,不断检索一个容器MessageQueue,这个容器,一旦有Message进来就去执行这个Message,如果这个Message有callback(一个Runnable,如果是handler.post(runnable)的话, 会生成一个Message对象,这个对象的callback参数被赋值成这个runnable对象),那么也去执行这个callback(也就是runnable对象)的run方法(这个就很类似我上面例子中的Test类中的Say方法了,仅仅只是调用这个run方法而已,不是去开线程).
解答疑问二:Runnable只是一个普通的接口,创建Runnable匿名内部类时这时候当前的线程还是主线程。
相关文章推荐
- 【杂文随笔】2016年总结 送自己一个字
- 【杂文】无关技术的2015年度总结
- 【杂文】总结专访李运华一文
- 【杂文随笔】2017年总结 送自己一个字
- 杂文---总结几天学的东西
- 杂文(总结报告)
- 【杂文】2016年度总结
- 【杂文】2017年度总结
- 多用户权限管理(课后总结)
- 项目开发总结(联想GIS)-----上传附件,动态创建文件夹
- CSDN VC编程经验总结(转)
- 逻辑思维能力测试题归纳总结之计算题逻辑思维能力测试题归纳总结之计算题
- 数据库内存参数调优技术的总结
- 网站测试基本方法-18. 网站用户界面测试总结
- 在用SWT进行socket编程中遇到的一些问题的总结
- Python中的正则表达式学习总结
- 思想总结(2011-9-29)
- 基础总结篇之九:Intent应用详解
- 正确高效的Android应用程序开发(答疑总结)
- 设计模式总结