handler post r 同一个线程的疑惑
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
handler.post(r);是把r加到消息队列,但并未开辟新线程。等到消息被取出时才执行。
package com.lei.handlethread;import android.os.Bundle;import android.os.Handler;import android.app.Activity;import android.view.Menu;import android.widget.Button;public class MainActivity extends Activity { private Button btn = null; private Handler handler = new Handler(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); handler.post(r); setContentView(R.layout.activity_main); btn = (Button)findViewById(R.id.hello);// 用来验证setContentView()先执行的。 String s=(String) btn.getText();// System.out.println(s); System.out.println("activity--->"+Thread.currentThread().getId()); System.out.println("Activityname--->"+Thread.currentThread().getName()); } Runnable r = new Runnable() { public void run() { System.out.println("handler--->"+Thread.currentThread().getId()); System.out.println("handlername--->"+Thread.currentThread().getName()); try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; }}
运行结果:logCat先打印如下信息。程序运行界面过10s显示TextView文字。
解释:
main线程从消息泵中取出一个消息,处理(执行相关函数),然后再取一个,处理。所以onCreate是某一消息处理中的执行,其中post一个消息,只是把消息加入队列了,还没执行新消息,什么时候执行?要等前一个消息处理完,再次从消息泵中取消息处理时,它才被执行。
所以先是main的system.out,再是post的system.out
相比之下,sendMessage是同步执行,用handler.sendMessage,那顺序就变了。
至于setContentView(R.layout.activity_main);肯定是最先执行,程序界面最先打开了,但是界面空间要等到Activity的Resume(即交互阶段)阶段才会显示。通过获取界面空间ID,在Log中打印空间内容就可验证。
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
handler post r 同一个线程的疑惑相关推荐
- handler.post(r)同一个线程的疑惑
handler.post(r);是把r加到消息队列,但并未开辟新线程.等到消息被取出时才执行. package com.lei.handlethread;import android.os.Bundl ...
- 源码分析Android Handler是如何实现线程间通信的
源码分析Android Handler是如何实现线程间通信的 Handler作为Android消息通信的基础,它的使用是每一个开发者都必须掌握的.开发者从一开始就被告知必须在主线程中进行UI操作.但H ...
- Handler之创建子线程Handler
Handler之创建子线程Handler Android的消息机制实现步骤: ①创建当前线程的looper ②创建当前线程的handler ③调用当前线程looper的loop方法 要实现创建子线程H ...
- QT下信号与槽不在同一个线程中如何connect
QT下信号与槽不在同一个线程中如何connect
- C++ 多线程——pthread_cancel 取消线程的疑惑
C++ 多线程--pthread_cancel 取消线程的疑惑 测试环境:Ubuntu18.04 pthread_cancel 简介 pthread_cancel(threadID)会发送终止信号给t ...
- Java同一个线程对象能否多次调用start方法
同一个线程对象能否多次调用start方法,搞清楚这个问题,首先需要了解线程的生命周期 一.线程生命周期 更多线程状态细节描述可查看Thread内部枚举类:State 从上图线程状态转换图可以看出: 新 ...
- AndroidStudio_Android中使用Handler实现非阻塞线程间通讯_跨线程更新UI_耗时处理完成后主动通知更新UI_在同一个activity用---Android原生开发工作笔记219
其实也是很简单的,比如,我们要是在android中去访问,http请求服务器的话,那么这个时候,UI线程不会一直等着,你访问完成,再去更新UI,因为这样 会导致看起来卡顿. 这个时候可以这样: 例如我 ...
- Android异步机制一:使用Thread+Handler实现非UI线程更新UI界面
概述:每个Android应用程序都运行在一个dalvik虚拟机进程中,进程开始的时候会启动一个主线程(MainThread),主线程负责处理和ui相关的事件,因此主线程通常又叫UI线程.而由于Andr ...
- 【Android 异步操作】手写 Handler ( Message 消息 | ThreadLocal 线程本地变量 | Looper 中的消息队列 MessageQueue )
文章目录 一.Message 消息 二.ThreadLocal 线程本地变量 三.Looper 中的消息队列 MessageQueue 一.Message 消息 模仿 Android 中的 Messa ...
最新文章
- Javascript 中 apply、call、bind
- LeetCode 1151. 最少交换次数来组合所有的 1(滑动窗口)
- It was in 2006, and as a desktop computer
- 项目方说性能达到百万TPS,如何测试它的可信度?
- Rust: tokio,异步代码与运行速度初探
- k2p拆机ttl刷breed_【1.10】k2p A版 22.10.3.42;22.10.3.38;拆机TTL刷BREED;B版 21.6.25.20刷机 图文教程...
- Oracle数据库实验报告六 PL/SQL基础
- Java实现多种格式上传视频资源、解析视频格式、视频截图处理
- 安装vue-cli脚手架使用swiper
- windows怎么设置始终以管理员身份运行
- 需要密码才能打开的word文件
- 办公邮箱怎么选,邮箱选哪个更好用?
- Zookeeper框架Curator使用
- 笔记本未指定打印机服务器,打印机出现在未指定里怎么办?可以这样解决
- wx:if 与wx:else
- 什么是数据清洗?数据清洗的原理是什么?
- macd金叉公式成功率_MACD金叉kdj死叉和20日线可靠吗
- Linux系统发展历史
- markdown表情
- 最大熵,三硬币模型的R语言代码