Android 实战之UI线程和Worker线程交互
哈哈,博文取了个比较霸气的名字,大家不都喜欢这样忽悠人吗 呵呵!
好了,现在就是很简单的点击查询,然后这个查询有点花时间,不想见面出现假死现象,所以在另外的线程进行查询。
好了,代码在此:
package com.example.gulanfinddemo; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.widget.EditText; public class FindResActivity extends Activity { private MyHandler handler;
private Boolean isKeywordFindBoolean = false;
EditText resText; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_find_res); resText = (EditText)findViewById(R.id.ResText); Log.v("FindResActivity threadId:", String.valueOf(Thread.currentThread().getId())); Intent intent = getIntent();
String findReString; if (null != intent.getStringExtra(MainActivity.suraAyaFindStr)) {
findReString = "按章节查询";
isKeywordFindBoolean = false;
}
else {
findReString = "按关键字查询";
isKeywordFindBoolean = true;
} Looper looper = Looper.myLooper();
handler = new MyHandler(looper); new findContentThread(handler, findReString).start(); //resText.setText(findReString);
} private class MyHandler extends Handler{
public MyHandler(Looper looper){
super(looper);
}
public void handleMessage(Message msg){
if (msg.what == 0) {
Bundle bundle = msg.getData();
resText.setText(bundle.getString("res"));
}
}
} }
看出来了,重载了handler,在
handleMessage里会进行UI的更新。
package com.example.gulanfinddemo; import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log; public class findContentThread extends Thread{ private String queryKeyString;
private Handler handler; public findContentThread(Handler sendHandler,String string){
queryKeyString = string;
handler = sendHandler;
} public void run(){
Log.v("findContentThread threadId:", String.valueOf(Thread.currentThread().getId()));
Message msgMessage = new Message();
Bundle bundle = new Bundle();
bundle.putString("res", queryKeyString);
msgMessage.setData(bundle);
msgMessage.what = 0;
handler.sendMessage(msgMessage);
super.run();
}
}
在这里用了扩展Thread的方法,处理之后handler会传回消息,之后就在handler里处理消息了。
然后里面打印了线程ID,从其中可以确定的确是在不同的线程里执行的。
Android 实战之UI线程和Worker线程交互的更多相关文章
- 模板应用--UI线程与worker线程同步 模仿c# invoke
由之前的一篇博文 <UI线程与worker线程><UI线程与worker线程>引出,UI线程与worker线程“串行化”在win32上实现是多么没有节操的事情,代码编写麻烦不说 ...
- UI线程与worker线程
也谈谈我对UI线程和worker线程的理解 UI线程又叫界面线程,能够响应操作系统的特定消息,包括界面消息.鼠标键盘消息.自定义消息等,是在普通的worker线程基础上加上消息循环来实现的,在这个消息 ...
- 在netty3.x中存在两种线程:boss线程和worker线程。
在netty 3.x 中存在两种线程:boss线程和worker线程.
- 为什么说android UI操作不是线程安全的
转载于:http://blog.csdn.net/lvxiangan/article/details/17218409#t2 UI线程及Android的单线程模型原则 使用Worker线程 Commu ...
- HTML5_06之拖放API、Worker线程、Storage存储
1.拖放API中源对象与目标对象事件间的数据传递: ①创建全局变量--污染全局对象: var 全局变量=null; src.ondragstart=function(){ 全局变量=数据值; ...
- UI线程和工作者线程
本文转载于:http://blog.csdn.net/libaineu2004/article/details/40398405 1.线程分为UI线程和工作者线程,UI线程有窗口,窗口自建了消息队列, ...
- Android 关于操作UI线程
在非UI线程里访问 Android UI toolkit—这个在一个worker线程修改了 View .这会导致不可预期的结果,而且还难以调试. 为了修复这个问题,Android提供了几个方法从非UI ...
- 【转】 Pro Android学习笔记(九十):了解Handler(4):Worker线程
目录(?)[-] worker线程小例子 小例子代码worker线程通过handler实现与主线程的通信 小例子代码继承Handler代码 小例子代码子线程的Runnable 文章转载只能用于非商业性 ...
- Android的UI设计与后台线程交互
本文将讨论Android应用程序的线程模型以及如何使用线程来处理耗时较长的操作,而不是在主线程中执行,保证用户界面(UI)的流畅运行.本文还将阐述一些用户界面(UI)中与线程交互的API.UI用户界面 ...
随机推荐
- 下载android 源码
http://source.android.com/source/downloading.html 1.下载repo 官网:curl http://commondatastorage.googleap ...
- xtrabackup工具
xtrabackup是基于InnoDB存储引擎灾难恢复的.它复制InnoDB的数据文件,尽管数据文件在内部是非一致性的,但在执行灾难恢复时可以保证这些数据文件是一致的,并且可用. 官方原理 在Inno ...
- ansible 2.2的源码编译安装
ansible代码下载地址:http://releases.ansible.com/ansible/ # git clone git://github.com/ansible/ansible.git ...
- svn从windows迁移到mac
http://my.oschina.net/grnick/blog/161424 一.备份VisualSVN项目 1. 现在要使用Linux作为svn服务器,之前是在windows Server 20 ...
- Linux内核分析之扒开系统调用的三层皮(上)
一.原理总结 本周老师讲的内容主要包括三个方面,用户态.内核态和中断,系统调用概述,以及使用库函数API获取系统当前时间.系统调用是操作系统为用户态进程与硬件设备进行交互提供的一组接口,也是一种特殊的 ...
- 关闭Ubuntu 12.04的内部错误提示
刚装完系统后,才安装一个输入法重启电脑后,竟然就提示'内部错误'需要提交报告,什么状况? 发扬'不求甚解'的光荣传统,我又不搞Linux开发,对我来说只是个工具而已,工具出问题了解决问题即可不想劳神深 ...
- 【基础知识】.Net基础加强08天
一. 文件的读取 1. 有FileStrem,为什么还要StreamWriter和StreamRead StreamWriter和StreamRead是用来读取文本文件的,每次只读取一行文本文件 二. ...
- 【基础知识】.Net基础加强06天
一. 垃圾回收 1. 垃圾回收的目的:提高内存的利用效率. 2. 垃圾回收器: 只回收托管堆中的内存资源,不回收其他资源(数据库连接.文件句柄.网络端口等): 3. 什么时候垃圾回收? a) 当对象没 ...
- Dynamic CRM 2013学习笔记(三十七)自定义审批流7 - 初始化(整套审批流下载、安装)
前面介绍了自定义审批流的配置.使用,这篇介绍下如何进行初始化. 一. 下载 从下面的地址下载整个审批流: http://yunpan.cn/cZ5Rdx5HCt3VF 下载完后,一共有三块内容: 二. ...
- Dynamic CRM 2013学习笔记(三十八)流程1 - 操作(action)开发与配置详解
CRM 2013 里流程有4个类别:操作(action).业务流程(business process flow).对话(dialog)和工作流(workflow).它们都是从 setting –> ...