安卓线程无法修改控件,如何解决

以倒计时为例子,刚开始我以为只要在按钮关联的函数里面每延时一秒就修改一下控件就行了,但是当我把他安装到模拟器运行的时候才发现事情没有那么简单。

 当我在模拟器启动程序,点击按钮时,程序崩溃了,所以这样写是不行的。

 这时我们需要用到安卓的 Handler 消息处理机制来解决线程不能修改控件的这个问题

package com.example.ymy;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
	
	Handler H;
	TextView textview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定控件
        textview = (TextView) findViewById(R.id.view);
        //建立Handler
        H = new Handler(){
        	//消息处理
        	public void handleMessage(Message msg) {
        		super.handleMessage(msg);
        		//修改控件
        		textview.setText(msg.what+"s");
        	}
        };
    }
    
    public void StartTime(View v){
    	
    	new Thread(new Runnable() {
			public void run() {
				for(int i=10;i>=0;i--){
					
					Message msg = new Message();
					msg.what = i;
					H.sendMessage(msg);  //发送启动信号,启动Ui线程的Message
					try {
						//延时1s
						Thread.sleep(1000);
						
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}).start();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值