Android 实战之UI线程和Worker线程交互
2013-10-18 11:18
369 查看
哈哈,博文取了个比较霸气的名字,大家不都喜欢这样忽悠人吗 呵呵!
好了,现在就是很简单的点击查询,然后这个查询有点花时间,不想见面出现假死现象,所以在另外的线程进行查询。
好了,代码在此:
看出来了,重载了handler,在
在这里用了扩展Thread的方法,处理之后handler会传回消息,之后就在handler里处理消息了。
然后里面打印了线程ID,从其中可以确定的确是在不同的线程里执行的。
好了,现在就是很简单的点击查询,然后这个查询有点花时间,不想见面出现假死现象,所以在另外的线程进行查询。
好了,代码在此:
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线程与后台线程交互方法
- Android中UI线程与后台线程交互设计的5种方法
- Android中UI线程与后台线程交互设计的5种方法
- Android中UI线程与后台线程交互设计的5种方法
- android提供了几种常用的方式,用于实现后台线程与UI线程的交互
- 理解Android UI与线程交互
- Android中UI线程与后台线程交互设计的5种方法
- Android的UI组件不是线程安全的,不应该在worker线程操纵UI
- Android中UI线程与后台线程交互设计的5种方法
- Android中UI线程与后台线程交互设计的5种方法
- android之后台线程(UI与线程交互)
- Android中UI线程与后台线程交互设计的5种方法
- Android中UI线程与后台线程交互设计的5种方法
- Android后台线程和UI线程的5种交互
- Android中UI线程与后台线程交互设计的方法
- Android 怎么启动一个工作线程及线程如何与UI线程交互
- android中UI线程与后台的交互方式详解
- 主线程负责交互(事件处理)和UI绘制(onDraw), 只能在主线程访问View, 其他线程不能直接访问View (Android)
- android之后台线程(UI与线程交互)
- android之后台线程(UI与线程交互)