android多线程实例及总结

来源:互联网 发布:零基础学软件编程 编辑:程序博客网 时间:2024/05/17 23:23
public class FirActivity extends Activity {    static final int LOOPER_QUIT=-1;    static final int LOOPER_BACK=1;    public Handler handler_fat=new Handler()//主线程handler,用于接收子线程传来的消息,并且主线程默认有Looper;        {            public void handleMessage (Message msg)            {                if(msg.what==LOOPER_BACK)//接收子线程的消息                {                    Log.d("father","father->LOOPER_BACK");                }            }        };    public Handler handler_son;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        Button button=(Button)findViewById(R.id.button1);        final Thread thread=new Thread(new Runnable() {            public void run() {                Looper.prepare();//子线程默认无looper,需开启looper;                handler_son=new Handler()//子线程Handler,用于接收其他线程发送来的消息;                {                    public void handleMessage (Message msg)                    {                        if(msg.what==LOOPER_QUIT)                        {                            Log.d("thread", "prepare to go to death");                            this.getLooper().quit();//结束Looper循环,子线程由于代码已执行完,准备死亡;                        }                        else if(msg.what==LOOPER_BACK)                        {                            Log.d("thread", "LOOPER_BACK");                            handler_fat.sendEmptyMessage(LOOPER_BACK);//发送给主线程消息;                        }                        else                        {                            Log.d("thread", msg.what+"");                        }                                              }                };                Looper.loop();//Looper正式开始运行,代码执行到此开始循环,后面在结束之前不会执行;                Log.d("thread", "going to death");            }        });        thread.start();//线程开始启动        button.setOnClickListener(new View.OnClickListener() {                          public void onClick(View v) {                // TODO Auto-generated method stub                Log.d("main",thread.isAlive()+"");//换回thread是否存活,此处为true;                handler_son.sendEmptyMessage(44);                handler_son.sendEmptyMessage(LOOPER_BACK);                handler_son.sendEmptyMessage(LOOPER_QUIT);                Log.d("main",thread.isAlive()+"");//此处为false;            }        });    }}


本文出自 “Rainlee的随笔记” 博客,请务必保留此出处http://rainlee.blog.51cto.com/7389753/1297205

0 0