android简单的UI与后台线程交互的框架
2015-04-12 16:53
495 查看
在android中经常出现长时间的任务需要后台线程处理,结束后通知UI线程刷新UI的需求
自己封装了一个简单的UI与后台线程交互的类,代码如下
用的时候这样:在UI线程中,如Button的onClick方法中
doHandler()函数为后台线程调用的方法,在这里面写加载数据的代码
根据doHandler()函数的返回结果,true则doneHandler()得到调用,error则doneErrorHandler()得到调用,这两个函数是UI线程,可以在这里面调用UI控件
另外,如果UI线程需要跟后台线程通信,可以用SimpleBackHandler的putExtra(String key,Object object)方法,对应getExtra(String key)即可拿到
自己封装了一个简单的UI与后台线程交互的类,代码如下
import java.util.HashMap; import java.util.Map; import android.os.Handler; import android.os.Message; public abstract class SimpleBackHandler extends Handler{ private static final int DONE_SUCCESS = 0; private static final int DONW_ERROR = 1; private Map<String, Object> extraObjectMap = new HashMap<String, Object>(); public SimpleBackHandler(){ super(); } public void start(){ new Thread(){ /* (non-Javadoc) * @see java.lang.Thread#run() */ @Override public void run() { // TODO Auto-generated method stub Message message = obtainMessage(); if (doHandler() ){ message.what = DONE_SUCCESS; } else { message.what = DONW_ERROR; } sendMessage(message); } }.start(); } public void putExtra(String key,Object object){ extraObjectMap.put(key, object); } public Object getExtra(String key){ if ( extraObjectMap.containsKey(key) ){ return extraObjectMap.get(key); } return null; } public abstract boolean doHandler(); public abstract void doneHandler(); public abstract void doneErrorHandler(); /* (non-Javadoc) * @see android.os.Handler#handleMessage(android.os.Message) */ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub int result = msg.what; if ( result == DONE_SUCCESS ){ doneHandler(); } else { doneErrorHandler(); } } }
用的时候这样:在UI线程中,如Button的onClick方法中
private OnClickListener onBtnClickListener = new OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub contentString = contentEditText.getText().toString(); new SimpleBackHandler() { /* (non-Javadoc) * @see com.example.ourtimes.common.SimpleBackHandler#doneErrorHandler() */ @Override public void doneErrorHandler() { // TODO Auto-generated method stub Toast.makeText(NewsCommentActivity.this, "加载失败", 200).show(); } @Override public void doneHandler() { // TODO Auto-generated method stub Toast.makeText(NewsCommentActivity.this, "加载成功", 200).show(); } @Override public boolean doHandler() { // TODO Auto-generated method stub loadData(); return true; } }.start(); } };
</pre><p></p><pre>
doHandler()函数为后台线程调用的方法,在这里面写加载数据的代码
根据doHandler()函数的返回结果,true则doneHandler()得到调用,error则doneErrorHandler()得到调用,这两个函数是UI线程,可以在这里面调用UI控件
另外,如果UI线程需要跟后台线程通信,可以用SimpleBackHandler的putExtra(String key,Object object)方法,对应getExtra(String key)即可拿到
相关文章推荐
- Android中UI线程与后台线程交互设计的5种方法
- Android中UI线程与后台线程交互设计的5种方法
- android之后台线程(UI与线程交互)
- Android中UI线程与后台线程交互设计的5种方法
- Android中UI线程与后台线程交互设计的5种方法
- Android中UI线程与后台线程交互设计的5种方法
- Android中后台线程与UI线程交互的五种方法
- android之后台线程(UI与线程交互)
- Android中UI线程与后台线程交互设计的5种方法
- Android中UI线程与后台线程交互设计的5种方法
- Android中UI线程与后台线程交互设计的5种方法
- Android后台线程和UI线程的5种交互
- Android中UI线程与后台线程交互设计的5种方法
- android之后台线程(UI与线程交互)
- Android中UI线程与后台线程交互设计的5种方法
- Android中UI线程与后台线程交互设计方法
- android120--后台线程与UI交互
- android中UI线程与后台的交互方式详解
- Android中UI线程与后台线程交互设计的5种方法
- Android中UI线程与后台线程交互设计的6种方法