Android 开子线程工作并用监听器传回结果到主线程--子线程与主线程通信
来源:互联网 发布:我的世界手机版机枪js 编辑:程序博客网 时间:2024/05/22 00:27
最近研究别人的代码,看到其开多线程进行工作,并且将结果通过监听器的方式返回给UI线程,代码很管用,也容易理解,所以就先记下来
写一个接口做为监听器(WorkListener),里面可以有多个方法,用于对应子线程工作不同的事件,如onStart(),onResult(),onStop(),等待
写一个类(Work),在该类中写一个工作线程继承自Thread(WorkThread),在该WorkThread中写入用于工作线程的代码。
– 在Work类中添加一个HashSet()
private final Collection<WorkListener> listeners = new HashSet();
– 在Work类中添加addWorkListener(WorkListener)方法
public void addWorkListener(WorkListener listener) {
Collection var2 = this.listeners;
synchronized(this.listeners) {
this.listeners.add(listener);
}
}– 在Work类中写一个抽象类继承自Runnable用在事件处理
private abstract class WorkEvent implements Runnable { private WorkEvent () { } public void run() { WorkListener[] emptyArray = new WorkListener[0]; WorkListener[] var2 = (WorkListener[]) this.listeners.toArray(emptyArray); int var3 = var2.length; for(int var4 = 0; var4 < var3; ++var4) { WorkListener listener = var2[var4]; this.execute(listener); } } protected abstract void execute(WorkListener listener);}
– 在Work类中根据需要写几个类继承自WorkEvent来实现各个事件,如ResultEvent
private class ResultEvent extends Work.WorkEvent { private final Object result; ResultEvent(Object result) { super(); this.result= result; } protected void execute(WorkListener listener) { listener.onResult(this.result); }}
– 在Work类中,创建一个Handler,用于将工作线程的数据发送到主线程
private final Handler mainHandler = new Handler(Looper.getMainLooper());
– 自此,监听器就写好了,接下来就是在工作线程(WorkThread)中利用监听器去传递各个事件(onResult,onStop等)了
WorkThread extends Thread { public void run() { ... String result="这是结果"; Work.this.mainHandler.post(Work.this.new ResultEvent(result)); ... }}
0 0
- Android 开子线程工作并用监听器传回结果到主线程--子线程与主线程通信
- Android子线程与主线程通信
- android 主线程与子线程通信
- symbian 主线程与子线程通信
- Unity子线程与主线程通信
- 主线程与子线程互相通信
- Android 子线程与主线程间的通信
- Android主线程与子线程之间的通信
- Android主线程与子线程之间的通信
- Android 主线程 子线程
- 跨线程、进程通信,主线程与子线程通信
- Android,UI主线程与子线程
- Android,UI主线程与子线程
- Android,UI主线程与子线程
- Android,UI主线程与子线程
- Android,UI主线程与子线程
- Android,UI主线程与子线程
- Android,UI主线程与子线程
- 海明码
- ACM必背算法(转)
- Java中日期中时间的比较
- JAVA中throw和throws的区别
- 《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE
- Android 开子线程工作并用监听器传回结果到主线程--子线程与主线程通信
- 同步服务器间的数据代码
- eclipse中ctrl+h默认打开是Java Search,怎么设置成默认打开是File Search?
- RJ45接口定义及网线线序
- 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX
- Activity Dialog样式的那些坑
- iOS 多个网络请求全部完成后再刷新
- Spring Security Java Config Preview: Web Security
- Git clone时报错需要设置 set Git path