Android 的消息传送机制是另一种形式的“事件处理”,这种机制是为了解决Android中的多线程问题--Android平台不允许新启动的线程访问该Activity的组件,这就导致新启动的线程无法动态的改变Activity组件的属性值。为了解决这个问题,Android中用handler的消息机制来解决这个问题。

下面看一个简单的例子。

示例1: handler timer 如何在子线程中通知主线程更新

public class MainActivity extends Activity {    private TextView textVIew;    private Button button;    private boolean isStart = false;    private Timer timer;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获得Activity组件        textVIew = (TextView) findViewById(R.id.textView1);        button = (Button) findViewById(R.id.button1);                                             timer = new Timer();        //定义Handler        final Handler handler = new Handler() {            public void handleMessage(Message msg) {                switch (msg.what) {                case 1:                    if(!isStart) {                        return;                    }                    textVIew.setText(Integer.toString((int) (Math.random()*14 + 1)));                                  break;                }            }        };                                             timer.schedule(new TimerTask() {                       @Override            public void run() {                handler.sendEmptyMessage(1);            }        }, 0, 50);        //通过匿名内部类的方式为按钮添加监听        button.setOnClickListener(new OnClickListener() {            //private Timer timer;            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                if(isStart) {                    button.setText("Start");                               isStart = false;                    return;                } if (!isStart) {                                                                     button.setText("Stop");                                    isStart = true;                    return;                }            }        });        }    @Override    protected void onStop() {        super.onStop();        timer.cancel();    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);        return true;    }}

运行结果:


注:改程序通过点按钮获得一个随机数。当点击Start按钮时,数字开始滚动,同时按钮变为“Stop”,点击stop。数字停止滚动,并将得到的随机数显示到屏幕。



更多相关文章

  1. Android提高十八篇之自定义Menu(TabMenu)
  2. android 自定义dialog的实现(自定义大小、去除黑色边框等)
  3. Android(安卓)6.0 分析 (一位网友的分析,不错)
  4. Handler 源码解析——Handler的创建
  5. 打开Android(安卓)Studio报错“Error running ***: Please selec
  6. 深入分析安卓(Android)中的注解
  7. Android蓝牙开发介绍
  8. android的volley框架
  9. Android学习05-----Android中的基本控件(上)

随机推荐

  1. Android ListView圆角
  2. 第二部分 工具库
  3. View去锯齿,在有些机器需要在图层的软件层
  4. android -> 尺寸变化动画类( ScaleAnimati
  5. [android]浅谈android的selector,背景选择
  6. Android 上SuperUser获取ROOT权限原理解
  7. Android(安卓)Editable
  8. RxJava2+retrofit简单使用,基于POST请求封
  9. Android高级界面组件(1)
  10. Xamarin Android(安卓)所见即所得问题