Android开发之Handler的使用方法(源代码分享)
Handler主要接受子线程发送的数据, 并用此数据配合主线程更新UI..
当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发。比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。 如果此时需要一个耗时的操作,例如: 联网读取数据或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,,会收到Android系统的一个错误提示 "强制关闭". 这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了.,来解决这个复杂的问题 , 由于Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。
我们先来看一下handler的简单使用方法
package com.example.android_handler_textview;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.widget.Button;
import android.widget.TextView;public class MainActivity extends Activity {private Button button;private static TextView textView;private MyHandler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) this.findViewById(R.id.button1);textView = (TextView) this.findViewById(R.id.msg);handler = new MyHandler();button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnew Thread(new MyThread()).start();}});}public static class MyHandler extends Handler {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);int arg1 = msg.arg1;String name = (String) msg.obj;textView.append(name + arg1);}}public class MyThread implements Runnable {int count = 0;@Overridepublic void run() {// TODO Auto-generated method stubwhile (count <= 20) {try {Thread.sleep(500);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}// 从消息池中获取消息,如果没有消息,创建一个消息,如果有,则取出来消息携带数据,由handler发送Message message = Message.obtain();message.arg1 = count;message.obj = "jack";count++;handler.sendMessage(message);}}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
Android开发之Handler的使用方法(源代码分享)相关推荐
- Android开发之android_apk 在线安装(源代码分享)
android_apk的在线安装,除了要设计Android 客户端的代码外,还要搭建服务器的代码,仿真实现中Android软件的在线升级. Android 客户端的代码截图如下. MainActiv ...
- Android开发之sdcard读写数据(源代码分享)
package com.example.f01_sdcard01;import java.io.File; import java.io.FileNotFoundException; import j ...
- Android开发之Socket通信的方法
老套图上图: 如上所示: 我这边定义了两个APP一个是server端一个是客户端 步骤: 先安装服务端APP,再安装客户端APP,然后打开客户端APP后悔自动打开服务端的service然后开启服务端的 ...
- Android开发之Handler
Handler 定义与作用 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释:当应用程序启动时,Android 首先会开启一个主线程(也就是UI线程),主线程为管理界面中的UI控件,进 ...
- Android开发之Handler和Looper的关系
关于Handler的总结. Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理. Handler:处理者,负责Mes ...
- Android开发之Handler机制记录
1.Handler 机制 说到 Handler,就不得不提与之密切相关的这几个类:Message.MessageQueue,Looper: Message: Message 中有两个成员变量值得关注: ...
- Android开发之SQLite的使用方法
前言 SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少.Android系统中也不 ...
- android 视频开发sd卡,Android开发之SD卡文件操作分析
本文实例讲述了Android开发之SD卡文件操作.分享给大家供大家参考,具体如下: 前面的文章中写过直接操作手机自带存储器的程序,这次就接着上次文章协议下对sd卡的文件操作.与自带存储不同的是使用sd ...
- android开发集成flash,Android开发之Adobe flash操作工具类
本文实例讲述了Android开发之Adobe flash操作工具类.分享给大家供大家参考,具体如下: public class AdobeUtil { /** * 安装flash插件 */ publi ...
最新文章
- c4android资源,OpenC4Android开发环境搭.doc
- android广播第三方库,Android Support 库:LocalBroadcastManager
- android t类型参数,数据绑定Android – 类型参数T具有不兼容的上限:ViewDataBinding和MainActivity...
- php中循环跳过,php for循环的exit / break / continue /goto 停止、跳过循环、继续循环...
- 麒麟9000芯片的库存真就是个迷
- js实现页面滚动,菜单固定
- 【lpxt】笔者支招:九招搞定显示器黑屏
- 各类软硬件简易资料830个共2.1G,感兴趣的小伙伴自行下载
- 宏观视角看抖音全生态
- Html和css算是编程语言吗,不被承认的编程语言
- 老一辈学计算机的在那,真实的南京大学计算机系
- 相见恨晚 linux下的c++filt 命令
- ubuntu 分区大小调整_如何调整Ubuntu分区的大小
- html css动漫素材,66种特效的CSS3动画库animate.css
- python查文章字数
- 微信公众号普通消息接收接口
- MFC添加界面的背景图片方法总结
- 二分算法详解:整数二分及浮点数二分算法(Binary Search)(含算法模板)
- 集成显卡和独立显卡哪个好 集成显卡与独立显卡区别
- Lambda表达式语法 (二)
热门文章
- php多图片上传程序,php多文件上传 多图片上传程序代码
- java awt 监视器_java – 停止所有Awt / Swing线程和监视器和东...
- 对抗生成网络_深度卷积生成对抗网络
- Winform控件:打开文件对话框(OpenFileDialog)
- inventor应用程序错误---解决方法
- [唐诗]入朝洛堤步月-上官仪
- win7清除系统托盘图标的方法
- @RenderBody、@RenderSection、@RenderPage、Html.RenderPartial、Html.RenderAction的作用和区别...
- 移动应用性能测试白皮书
- 深入浅出说编译原理(一)