Android Hanlder小例子
2016-02-25 21:28
423 查看
1、Handler基本概念:
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行处理,也就数说发送消息和接收消息 不是同步处理。 这种机制通常用来处理相对耗时比较长的操作。
2、Handler 常用方法:
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
以上post类方法允许你排列一个Runnable对象到主线程队列中;
sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新。
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/txtTest"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="HandlerTest"
/>
<Button android:id="@+id/btnTest"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="测试"
/>
</LinearLayout>
主函数:
分析:
click ——》new Thread ——》sendEmptyMessage(1) ——》handleMessage;
运行结果:
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行处理,也就数说发送消息和接收消息 不是同步处理。 这种机制通常用来处理相对耗时比较长的操作。
2、Handler 常用方法:
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
以上post类方法允许你排列一个Runnable对象到主线程队列中;
sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新。
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/txtTest"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="HandlerTest"
/>
<Button android:id="@+id/btnTest"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="测试"
/>
</LinearLayout>
主函数:
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; /** * Android Handler 异步消息处理机制 * */ public class HandlerTestActivity extends Activity { private static final String TAG="HandlerTestActivity"; private Button btnTest; private TextView txtTest; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); txtTest = (TextView) this.findViewById(R.id.txtTest); btnTest= (Button) this.findViewById(R.id.btnTest); //设置 OnClick 监听器 btnTest.setOnClickListener(new BtnTestOnClickListener()); } //点击测试按钮后调用 BtnTestOnClickListener 的 OnClick 方法 class BtnTestOnClickListener implements OnClickListener { public void onClick(View v) { /* //把线程对象放到handler的队列中,线程会马上启动执行 handler.post(thread); */ //启动线程 thread.start(); try { // 为了看到异步效果,我让当前线程停止了2秒钟 Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } Log.i(TAG, "OnClick........"); } } // 定义一个Handler,用来异步处理数据 Handler handler = new Handler() { //相当于jquery $.ajax方法中的 Success:function(){} public void handleMessage(android.os.Message msg) { // 对线程中 handler 返回的结果进行处理 Log.i(TAG, "结果返回,正在处理"); if(msg.what ==1) { txtTest.setText("异步处理结果 === Handler "); } }; }; Thread thread = new Thread() { public void run() { Log.i(TAG, "start Thread"); //发送一个空消息到消息队列里面 //此方法相当于后台往前台Ajax响应结果,在Java当中,相当于一个Action方法里面out.println(1); handler.sendEmptyMessage(1); }; }; }
分析:
click ——》new Thread ——》sendEmptyMessage(1) ——》handleMessage;
运行结果:
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories