Android线程间的通信(Handler的使用)
2016-03-07 11:15
579 查看
在Android中,线程之间进行信息交互时经常会使用消息,下面举个例子来说明。
由于Android系统中的视图组件不是线程安全的,如果要更新视图,则必须在主线程中更新,不可以在子线程中执行更新操作。我们就在子线程中通知主线程,让主线程做更新操作,如何通知主线程呢?这里就需要使用到Handler对象。
HandlerActivity.java源码如下:
![](http://img.blog.csdn.net/20160307114259091?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
由于Android系统中的视图组件不是线程安全的,如果要更新视图,则必须在主线程中更新,不可以在子线程中执行更新操作。我们就在子线程中通知主线程,让主线程做更新操作,如何通知主线程呢?这里就需要使用到Handler对象。
HandlerActivity.java源码如下:
package cn.lh.handlerdemo; 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.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class HandlerActivity extends Activity { private static final int COMPLETED = 1; private static TextView textview = null; private static Button btn = null; private static Handler handler = new Handler(){ public void handleMessage(Message msg){ if(msg.what == COMPLETED){ //修改View组件显示内容 textview.setText("update completed"); //设置按钮不显示 btn.setVisibility(View.GONE); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_handler); btn = (Button)findViewById(R.id.btn); textview = (TextView)findViewById(R.id.text1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub new WorkThread().start(); } }); } //工作线程 private class WorkThread extends Thread{ @Override public void run() { //这里处理比较耗时的操作 Message msg = new Message(); msg.what = COMPLETED; handler.sendMessage(msg); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.handler, menu); return true; } }效果截图如下:
相关文章推荐
- Android static静态成员变量的使用误区
- Android--慎用static静态变量
- 开发中碰到的问题:Android应用程序打包时,出现错误:"XXX" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arab
- 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central
- Android自定义控件
- Android drawable in xml study
- Android 将一张图片变为圆形图片
- 用Chrome调试Android手机上的网页
- android日常开发总结的技术经验60条
- 【学习笔迹】系列十一:Android Studio实现JUnit Instrumentation测试
- Android Gallery组件实现循环显示图像
- Android Studio 指定签名证书文件
- 【Android】Activity全屏显示解决方案
- PagerSlidingTabStrip嵌套PagerSlidingTabStrip的Touch事件冲突解决
- Android Studio导入项目问题小结
- Android日常开发总结的技术经验60条
- Android Hal 分析
- Android binder (8): 为何binder比D-Bus的效率高,高多少?
- Android px、dp、sp之间相互转换
- Android binder (7): 看个例子,如何通信