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

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

 这时我们需要用到安卓的 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();
    }
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐