Android开发历程_12(Handler的使用)

来源:互联网 发布:矢量图软件coreldraw 编辑:程序博客网 时间:2024/05/22 07:51
本文主要介绍Android中Handler的简单使用方法,Handler跟多线程,消息队列联系很紧密,在平常的实际程序开发中比较常见。本文分为4个简单的例子来学校handler。

  参考资料为Mars老师的教程,http://www.mars-droid.com/.

  开发环境为android4.1.

  例1

这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中.

  本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会继续启动该线程,每次线程的run函数中完成对界面输出nUpdateThread...文字,不停的运行下去,当单击End按钮时,该线程就会停止,如果继续单击Start,则文字又开始输出了。

  软件界面如下:

  

  单击Start后会有如下显示:

  

实验主要部分代码和注释(附录有工程code下载链接):

MainActivity.java:

package com.example.handler1;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity {    private TextView text_view = null;    private Button start = null;    private Button end = null;        //使用handler时首先要创建一个handler    Handler handler = new Handler();    //要用handler来处理多线程可以使用runnable接口,这里先定义该接口    //线程中运行该接口的run函数    Runnable update_thread = new Runnable()    {        public void run()        {            //线程每次执行时输出"UpdateThread..."文字,且自动换行            //textview的append功能和Qt中的append类似,不会覆盖前面            //的内容,只是Qt中的append默认是自动换行模式            text_view.append("\nUpdateThread...");            //延时1s后又将线程加入到线程队列中            handler.postDelayed(update_thread, 1000);                    }    };        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        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());            }    private class StartClickListener implements OnClickListener    {        public void onClick(View v) {            // TODO Auto-generated method stub            //将线程接口立刻送到线程队列中            handler.post(update_thread);        }                    }        private class EndClickListener implements OnClickListener    {        public void onClick(View v) {            // TODO Auto-generated method stub            //将接口从线程队列中移除            handler.removeCallbacks(update_thread);        }            }        @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.activity_main, menu);        return true;    }}