(andbase)android 线程池 显示进度框和移除进度框 Toast提示文本

来源:互联网 发布:手绘制作软件 编辑:程序博客网 时间:2024/05/14 05:23

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);
}
       
        });


0 0
原创粉丝点击