Android(安卓)-- handler消息传送机制
16lz
2021-01-24
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。数字停止滚动,并将得到的随机数显示到屏幕。
更多相关文章
- Android提高十八篇之自定义Menu(TabMenu)
- android 自定义dialog的实现(自定义大小、去除黑色边框等)
- Android(安卓)6.0 分析 (一位网友的分析,不错)
- Handler 源码解析——Handler的创建
- 打开Android(安卓)Studio报错“Error running ***: Please selec
- 深入分析安卓(Android)中的注解
- Android蓝牙开发介绍
- android的volley框架
- Android学习05-----Android中的基本控件(上)