android的ui线程阻塞实验和证明handle.postdelay没有起新线程

代码说明:

<span style="font-size:18px;">Handler handler = new Handler();
	
	Runnable update_thread = new Runnable() {
		
		@Override
		public void run() {
			// TODO Auto-generated method stub
			 //线程每次执行时输出"UpdateThread..."文字,且自动换行
            //textview的append功能和Qt中的append类似,不会覆盖前面
            //的内容,只是Qt中的append默认是自动换行模式
            text_view.append("\nUpdateThread...");
            //延时1s后又将线程加入到线程队列中
            handler.postDelayed(update_thread, 1000);
            
            System.out.println("on update_thread");
		}
	};</span>


<span style="font-size:18px;"> protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        
        
        text_view = (TextView)findViewById(R.id.text_view);
        start = (Button)findViewById(R.id.start);
        start.setOnClickListener(new StartClickListener());
        end = (Button)findViewById(R.id.end);
        end.setOnClickListener(new EndClickListener());
        
        handler.post(update_thread);
        while(true)
        {
           // SystemClock.sleep(2000);
            text_view.append("\non create...");
        	System.out.println("\n agian");
        	SystemClock.sleep(1000);
        	 System.out.println("\n on Create");
        }</span>
在while循环里面的textview不会显示on vreate。但是控制台会每隔一秒打印system.out的字符。另外hand.post目的让textview显示字符串,但是也没有效果。只是空白的activity。因为ui线程被while循环定格了。过了五秒之后,app自动停止,这就是系统自带的五秒异常退出。

个人理解:在android的应用里面的oncreate方法,不能被阻塞,即启动必须执行完这个方法。紧接着。在这个方法里面注册的view会才会去做显示功能,或者如上面代码才会去执行handler的post功能。

另外证明,handler.postdelay(runable,second)不会启动新线程,说明该runable与oncreate是同一条线程,runable的run执行代码是在oncreate执行完之后,该线程从消息队列里面取出来计算second之后再执行。

<span style="font-size:18px;">handler.postDelayed(update_thread, 1000);再次把run包装成一个消息发到生成handler的线程中,该线程执行run。如果是跟oncreate是同一个线程。那么就会每隔一秒执行一次run。</span>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值