当前位置: 首页 > news >正文

深入Android架构(从线程到AIDL)_08 认识Android的主线程

目录

3、 认识Android的主线程(又称UI线程)

复习: 各进程(Process)里的主线程​编辑

UI线程的责任: 迅速处理UI事件

举例


3、 认识Android的主线程(又称UI线程)

复习: 各进程(Process)里的主线程
UI线程的责任: 迅速处理UI事件
  • 在Android里,关照UI画面的事件(Event)是UI线程的重要职责,而且是它的专属职责,其它子线程并不可以插手存取UI画面上的对象(如TextView)呢!
  • 由于Android希望UI线程能够给予用户的要求做快速的反应。如果UI 线程花费太多时间做幕后的事情,而在UI事件发生之后,让用户等待超过5秒钟而未处理的话,Android就会向用户道歉。
// ac01.java
// ……..
public class ac01 extends Activity implements OnClickListener {public TextView tv;private Button btn, btn2, btn3;public void onCreate(Bundle icicle) {super.onCreate(icicle);LinearLayout layout = new LinearLayout(this);layout.setOrientation(LinearLayout.VERTICAL);btn = new Button(this); btn.setId(101);btn.setBackgroundResource(R.drawable.heart);btn.setText("Block UI thread"); btn.setOnClickListener(this);LinearLayout.LayoutParams param =new LinearLayout.LayoutParams(150,50);param.topMargin = 10;layout.addView(btn, param);btn2 = new Button(this); btn2.setId(102);btn2.setBackgroundResource(R.drawable.heart);btn2.setText("Show"); btn2.setOnClickListener(this);layout.addView(btn2, param);btn3 = new Button(this); btn3.setId(103);btn3.setBackgroundResource(R.drawable.heart);btn3.setText("Exit"); btn3.setOnClickListener(this);layout.addView(btn3, param);tv = new TextView(this);tv.setTextColor(Color.WHITE); tv.setText("");LinearLayout.LayoutParams param2 =new LinearLayout.LayoutParams(150, 60);param2.topMargin = 10;layout.addView(tv, param2);setContentView(layout);//------------------------------setTitle("please press <Block...> & <Show> ");tv.setText("then wait for 5 min...");}public void onClick(View v) {switch(v.getId()){case 101:try { Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}break;case 102: break;case 103: finish(); break;}}
}
  • 此程式執行時,畫面上先出現:

       

  • 連續按下<Block UI thread>和<Show>按鈕,然後等待5秒鐘,就會出現剛才所說的道歉提示,如下圖:

      

举例
  • 如果想要一边秀动画,一边播音乐时,使用单一线程来控制一边秀动画,一边播音乐,如下图所示;又会如何呢?

 

  • 主线程可以诞生多个子线程来分担其工作,尤其是比较冗长费时的幕后服务工作,例如播放动画的背景音乐、或从网络下载影片等。于是,主线程就能专心于处理UI画面的事件了。
  • 再如,当你开发一个游戏程序时,如果你希望游戏循环不受UI事件的干扰,或希望游戏循环(GameLoop)不要阻塞住UI线程的话,就不适合拿UI线程去跑游戏循环了。
     
http://www.lryc.cn/news/514874.html

相关文章:

  • 集线器,交换机,路由器,mac地址和ip地址知识记录总结
  • 【VUE】使用create-vue快速创建一个vue + vite +vue-route 等其他查看的工程
  • Jetpack Compose 学习笔记(一)—— 快速上手
  • Kafka3.x KRaft 模式 (没有zookeeper) 常用命令
  • Leetcode 最大正方形
  • ubuntu22.04录屏黑屏,飞书共享屏幕黑屏问题
  • 沙箱模拟支付宝支付3--支付的实现
  • Golang的代码质量分析工具
  • 【Linux】:多线程(读写锁 自旋锁)
  • Java开发 PDF文件生成方案
  • 数学期望和方差
  • 【面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍Tensor RT 的优化流程。
  • BLDC无感控制的驱动逻辑
  • BP神经网络的反向传播算法
  • [实用指南]如何将视频从iPhone传输到iPad
  • Linux Snipaste 截图闪屏/闪烁
  • 【YOLOv5】源码(common.py)
  • Node 如何生成 RSA 公钥私钥对
  • 瑞_Linux中部署配置Java服务并设置开机自启动
  • javaEE-多线程进阶-JUC的常见类
  • Flume拦截器的实现
  • Swift Combine 学习(四):操作符 Operator
  • leetcode 173.二叉搜索树迭代器栈绝妙思路
  • df.groupby([pd.Grouper(freq=‘1M‘, key=‘Date‘), ‘Buyer‘]).sum()
  • LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 (4)
  • icp备案网站个人备案与企业备案的区别
  • 如何不修改模型参数来强化大语言模型 (LLM) 能力?
  • AF3 AtomAttentionEncoder类的init_pair_repr方法解读
  • DDoS攻击防御方案大全
  • Vue中常用指令