深入Android架构(从线程到AIDL)_08 认识Android的主线程
目录3、 认识Android的主线程(又称UI线程)
复习: 各进程(Process)里的主线程编辑
UI线程的责任: 敏捷处理UI事件
举例
3、 认识Android的主线程(又称UI线程)
复习: 各进程(Process)里的主线程
https://i-blog.csdnimg.cn/direct/5b860ccffe3e49c8a1326889279d17fa.png
UI线程的责任: 敏捷处理UI事件
[*]在Android里,关照UI画面的事件(Event)是UI线程的紧张职责,而且是它的专属职责,其它子线程并不可以加入存取UI画面上的对象(如TextView)呢!
[*]由于Android希望UI线程可以或许给予用户的要求做快速的反应。假如UI 线程花费太多时间做幕后的事情,而在UI事件发生之后,让用户等待高出5秒钟而未处理的话,Android就会向用户致歉。
https://i-blog.csdnimg.cn/direct/b76f5a0712d246c69c887b90feee9369.png
// 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;
}
}
}
[*]此程式執行時,畫面上先出現:
https://i-blog.csdnimg.cn/direct/dc2c31adf90a400f83c4cbe6621c64bd.png
[*]連續按下<Block UI thread>和<Show>按鈕,然後等待5秒鐘,就會出現剛才所說的致歉提示,如下圖:
https://i-blog.csdnimg.cn/direct/4428dcfe612941acb52ec1b246765e3d.png
举例
[*]假如想要一边秀动画,一边播音乐时,使用单一线程来控制一边秀动画,一边播音乐,如下图所示;又会怎样呢?
https://i-blog.csdnimg.cn/direct/e103bed2d6034e639c0149b5478784f5.png
[*]主线程可以诞生多个子线程来分担其工作,尤其是比力冗长费时的幕后服务工作,比方播放动画的配景音乐、或从网络下载影片等。于是,主线程就能专心于处理UI画面的事件了。
[*]再如,当你开发一个游戏程序时,假如你希望游戏循环不受UI事件的干扰,或希望游戏循环(GameLoop)不要阻塞住UI线程的话,就不适合拿UI线程去跑游戏循环了。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]