博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android Handler的核心原理,核心代码关键词
阅读量:4291 次
发布时间:2019-05-27

本文共 1207 字,大约阅读时间需要 4 分钟。

原则:
1.ui改变必须在ui线程中执行。
2.耗时操作必须在子线程。
经典用法:

--即,handler机制。

new Thread(new Runnable(){	public void run(){		myHandler.post();/myHandler.sendMessage();	//将子线程的处理,发送到主线程的 MessageQueue。在主线程的handlerMessage重写中,操作UI。	}}).show();
//注: 子线程也可以创建消息的循环机制。class childThread extends Thread{	Handler myHandler;	public void run(){		Looper.prepare();		myHandler = new Handler(){			handlerMessage(Message){		//进行的操作			}		};		myOtherOperation();		Looper.loop();// Loop开始建立并且开始堵塞进程 MessageQueue.next();		myOtherOperation();	}	public void myOtherOperation(){	//子线程中的别的操作。	}}
childThread.myHandler.sendMessage(....);//主线程中使用handler对象。
其他机制:其实都是调用Activity自己维护的Handler。

// 1.Activity.runOnUiThread(new Runnable(){public void run(){}});// 2.View.post(new Runnable(){public void run(){}});// 3.View.postDelayed(Runnable,long);// 4.上面比较繁琐。异步任务类简化了这些处理AsyncTask<> myAsync = new AsyncTask<>(){	public void doInBackground(){	}}
//为什么主线程的 MainLooper->MessageQueue.next() 没有阻塞卡死。
//Linux 机制,和 ActivityThread 机制。
1,epoll模型当没有消息的时候会epoll.wait,等待句柄写的时候再唤醒。

2,所有的ui操作都通过handler来发消息操作。

1.handler机制是使用pipe来实现的 

2.主线程没有消息处理时阻塞在管道的读端 

3.binder线程会往主线程消息队列里添加消息,然后往管道写端写一个字节,这样就能唤醒主线程从管道读端返回,也就是说queue.next()会调用返回

4.dispatchMessage()中调用onCreate, onResume

转载地址:http://gdegi.baihongyu.com/

你可能感兴趣的文章
谷歌浏览器chrome即将在2020年底停止支持flash,我们程序员该怎么办
查看>>
如何将数据采集到 Elasticsearch 服务
查看>>
面试官:mysql表设计要注意什么?
查看>>
一些精致小众网站收集录
查看>>
计算机科学探秘之linux发展史
查看>>
程序员每天早上早来10分钟的好处
查看>>
互联网30年,泡沫如梦,一个个泡沫和风口过后,会是什么样的结局
查看>>
升级centos 6.8 服务器的gcc
查看>>
API网关在微服务架构中的应用,这一篇就够了
查看>>
JVM发生内存溢出的8种原因、及解决办法
查看>>
SpringBoot2.0 基础案例(12):基于转账案例,演示事务管理操作
查看>>
高性能负载均衡:nginx搭建tomcat集群
查看>>
Spring切面中的正则表达式
查看>>
一直再说高并发,多少QPS才算高并发?
查看>>
Git恢复之前版本的两种方法reset、revert(图文详解)
查看>>
Maven打包的三种方式
查看>>
电商场景:并发扣库存,怎么保证不超卖又不影响并发性能
查看>>
分布式事务处理方式总结
查看>>
延迟队列有哪些实现方案?说说你的看法
查看>>
厉害了!我们老大半小时把我的springboot项目并发提升几倍
查看>>