线程01

package jxnu.edu.cn.x3321;

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

public class MainActivity extends Activity {

    //1.定义成员变量
    Button bt;
    TextView tv;
    
    Handler hd=new Handler() {
        public void handleMessage(Message msg) {//这个是在重写Handler里的handleMessage方法
            if(msg.what==1) {
                //不断地更新TextView的值
                tv.setText(String.valueOf(msg.obj));
            }
            //处理线程1的过程
        }
    };
    //message不断发送数据存到栈里,系统会每隔一段时间就会执行handler的handlemessage方法 从栈顶拿出对应的messgae
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //2.初始化
        init();
        
        //3.定义注册事件监听器
        bt.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //生成一个线程   方法:1.实现接口 2.new一个
                new Thread() {
                    public void run() {
                        for(int i=0;i<10;i++) {
                            
                            try {
                                Thread.sleep(1000);
                                //以毫秒为单位
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            //可能会产生异常所以要用trycatch裹起来
                            
                            //用messgae对象封装好数据传给主线程
                            Message ms=new Message();
                            ms.obj="更新后的值为:"+i;
                            //这句就是给ms赋值 是object类型
                            ms.what=1;//what表示数据的类型或者是标识 其他子线程what为2 相当于编个号
                            //接下来通过什么方式发给主线程 通过什么工具
                            hd.sendMessage(ms);
                            //hd.post(ms);还可以用这个 用这个就可以不要写sendmessage方法了 下节课讲
                        }
                    }//这个方法是任何线程都要有的 这是线程的入口 一旦启动线程就开始执行run方法(相当于main)
                    //线程可以休眠!(任何子线程都可以休眠 主不可以)
                }.start();
            }
        });
    }

    private void init() {
        // TODO Auto-generated method stub
        bt=(Button)this.findViewById(R.id.bt);
        tv=(TextView)this.findViewById(R.id.tv);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

 

posted @ 2017-09-18 14:47  喂鲨鱼  阅读(158)  评论(0编辑  收藏  举报