1.显示进度框和移除进度框
/** 加载框的文字说明. */
private String mProgressMessage = "请稍候...";
/** 全局的加载框对象,已经完成初始化. */
public ProgressDialog mProgressDialog;
/**
* 描述:显示进度框.
*/
public void showProgressDialog() {
showProgressDialog(null);
}
/**
* 描述:显示进度框.
* @param message the message
*/
public void showProgressDialog(String message) {
// 创建一个显示进度的Dialog
if(!AbStrUtil.isEmpty(message)){
mProgressMessage = message;
}
if (mProgressDialog == null) {
mProgressDialog = new ProgressDialog(this);
// 设置点击屏幕Dialog不消失
mProgressDialog.setCanceledOnTouchOutside(false);
}
mProgressDialog.setMessage(mProgressMessage);
showDialog(AbConstant.DIALOGPROGRESS);
}
/**
* 描述:移除进度框.
*/
public void removeProgressDialog() {
removeDialog(AbConstant.DIALOGPROGRESS);
}
2.Toast提示文本
/**
* 描述:Toast提示文本.
* @param text 文本
*/
public void showToast(String text) {
Toast.makeText(this,""+text, Toast.LENGTH_SHORT).show();
}
/**
* 描述:Toast提示文本.
* @param resId 文本的资源ID
*/
public void showToast(int resId) {
Toast.makeText(this,""+this.getResources().getText(resId), Toast.LENGTH_SHORT).show();
}
3.在线程中提示文本信息
/**
* 描述:在线程中提示文本信息.
* @param resId 要提示的字符串资源ID,消息what值为0,
*/
public void showToastInThread(int resId) {
Message msg = baseHandler.obtainMessage(0);
Bundle bundle = new Bundle();
bundle.putString("Msg", this.getResources().getString(resId));
msg.setData(bundle);
baseHandler.sendMessage(msg);
}
/**
* 描述:在线程中提示文本信息.
* @param toast 消息what值为0
*/
public void showToastInThread(String toast) {
Message msg = baseHandler.obtainMessage(0);
Bundle bundle = new Bundle();
bundle.putString("Msg", toast);
msg.setData(bundle);
baseHandler.sendMessage(msg);
}
4.线程池
/**
* The Class AbAppData.
*/
public class AbAppData {
/** 日志开关. */
public static boolean DEBUG = false;
/** 性能测试. */
public static boolean mMonitorOpened = false;
/** 起始执行时间. */
public static long startLogTimeInMillis = 0;
}
/**
*
* Copyright (c) 2012 All rights reserved
* 名称:AbTaskPool.java
* 描述:线程池,程序中只有1个
* @author zhaoqp
* @date:2013-5-23 上午10:10:53
* @version v1.0
*/
public class AbTaskPool{
/** The tag. */
private static String TAG = "AbTaskPool";
/** The Constant D. */
private static final boolean D = AbAppData.DEBUG;
/** 单例对象 The http pool. */
private static AbTaskPool mAbTaskPool = null;
/** 固定5个线程来执行任务. */
private static int nThreads = 5;
/** 线程执行器. */
private static ExecutorService executorService = null;
/** 下载完成后的消息句柄. */
private static Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
AbTaskItem item = (AbTaskItem)msg.obj;
if(item.getListener() instanceof AbTaskListListener){
((AbTaskListListener)item.listener).update((List<?>)item.getResult());
}else if(item.getListener() instanceof AbTaskObjectListener){
((AbTaskObjectListener)item.listener).update(item.getResult());
}else{
item.listener.update();
}
}
};
/**
* 初始化线程池
*/
static{
nThreads = AbAppUtil.getNumCores();
mAbTaskPool = new AbTaskPool(nThreads*5);
}
/**
* 构造线程池.
*
* @param nThreads 初始的线程数
*/
protected AbTaskPool(int nThreads) {
executorService = Executors.newFixedThreadPool(nThreads);
}
/**
* 单例构造图片下载器.
*
* @return single instance of AbHttpPool
*/
public static AbTaskPool getInstance() {
return mAbTaskPool;
}
/**
* 执行任务.
* @param item the item
*/
public void execute(final AbTaskItem item) {
executorService.submit(new Runnable() {
public void run() {
try {
//定义了回调
if (item.listener != null) {
item.listener.get();
//交由UI线程处理
Message msg = handler.obtainMessage();
msg.obj = item;
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
*
* 描述:获取线程池的执行器
* @return executorService
* @throws
*/
public static ExecutorService getExecutorService() {
return executorService;
}
/**
* 描述:立即关闭.
*/
public void shutdownNow(){
if(!executorService.isTerminated()){
executorService.shutdownNow();
listenShutdown();
}
}
/**
* 描述:平滑关闭.
*/
public void shutdown(){
if(!executorService.isTerminated()){
executorService.shutdown();
listenShutdown();
}
}
/**
* 描述:关闭监听.
*/
public void listenShutdown(){
try {
while(!executorService.awaitTermination(1, TimeUnit.MILLISECONDS)) {
if(D) Log.d(TAG, "线程池未关闭");
}
if(D) Log.d(TAG, "线程池已关闭");
} catch (Exception e) {
e.printStackTrace();
}
}
}
5.数据执行单位
public class AbTaskItem {
/** 记录的当前索引. */
public int position;
/** 执行完成的回调接口. */
public AbTaskListener listener;
/** 执行完成的结果. */
private Object result;
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
public AbTaskListener getListener() {
return listener;
}
public void setListener(AbTaskListener listener) {
this.listener = listener;
}
public Object getResult() {
return result;
}
public void setResult(Object result) {
this.result = result;
}
}
6.任务执行的控制父类
public class AbTaskListener {
/**
* 描述:执行开始后调用.
*/
public void get(){};
/**
* 描述:执行开始后调用.
*/
public void update(){};
}
7.具体实现
//线程池
poolBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
//显示进度框
showProgressDialog();
AbTaskPool mAbTaskPool = AbTaskPool.getInstance();
//定义异步执行的对象
final AbTaskItem item = new AbTaskItem();
item.listener = new AbTaskListener() {
@Override
public void update() {
removeProgressDialog();
showToast("执行完成");
}
@Override
public void get() {
try {
showToastInThread("开始执行");
Thread.sleep(1000);
//下面写要执行的代码,如下载数据
} catch (Exception e) {
}
};
};
//开始执行
mAbTaskPool.execute(item);
}
});