public interface AsyncWorkIF { public Object excute(Map<String,String> map); }public class AsyncWorkHandler extends Handler implements AsyncWorkIF{   private static Looper sLooper = null;   private WorkerHandler mWorkerHanler ;   protected final class WorkerArgs{ Handler handler;  Map<String,String> map; }  public AsyncWorkHandler(){ synchronized (AsyncQueryHandler.class) { if (sLooper == null) {  HandlerThread thread = new HandlerThread("AsyncWorkHandler");  thread.start();  sLooper = thread.getLooper();  }  } mWorkerHanler = new WorkerHandler(sLooper);  }  /** * 获取结果并发送至消息 * @param bean */ public void doWork(Map<String,String> map){ Message msg = mWorkerHanler.obtainMessage(); WorkerArgs workArgs = new WorkerArgs();  workArgs.handler = this; workArgs.map = map; msg.obj = workArgs;  mWorkerHanler.sendMessage(msg); }   /** * 得到消息,需要重写 */ @Override  public void handleMessage(Message msg){} /**  * 实际执行方法 */  @Override public Object excute(Map<String, String> map) {  return null; }   protected class WorkerHandler extends Handler {   public WorkerHandler(Looper looper) {  super(looper);  }  @Override  public void handleMessage(Message msg) {    WorkerArgs args = (WorkerArgs) msg.obj;   Map<String,String> quest_map = args.map;  Object obj = excute(quest_map);//调用excute方法执行某个操作  Message result = args.handler.obtainMessage();   result.obj = obj;  result.sendToTarget();//发送消息至目标  }   } } 

 基类如上,  

注意:

1. AsyncWorkHandler的子类有成员WorkerHandler,新建一个线程来初始化WorkerHandler的looper

2. AsyncWorkHandler的子类通过调用doWork(Map<String,String> map)来启动整个异步操作

3. AsyncWorkHandler的子类将doWork的参数传递到WorkerHandler的handleMessage中,然后WorkerHandler的handleMessage开始调用父类(AsyncWorkHandler的子类)的 Object obj = excute(quest_map); 将结果获取后,再通过result.sendToTarget()传递到父类(AsyncWorkHandler的子类)的HandleMessage函数。

举例:

//初始化信息        AsyncWorkHandler asyncQueryHandler = new AsyncWorkHandler(){                @Override            public Object excute(Map<String, String> map) {            HotProductBean bean = CacheManager.getInstance().getHostProductBean();                            if(bean==null){                bean = ProductAction.getHotProduct();                }                            return bean;                        }                        @Override            public void handleMessage(Message msg) {                        if(msg.obj!=null){                        HotProductBean bean = (HotProductBean)msg.obj;                        if("true".equals(bean.getResult())){                                        popFileList = bean.getPopFileList();                    promFileList = bean.getPromFileList();                                        int popSize = popFileList.size();                                        adapter_gallery_center = new IndexImageAdapter(_context,popFileList);                    adapter_gallery_bottom = new IndexBottomAdapter(_context,promFileList);                                        //初始化5个分页的点,若过多怎么弄?                    point_count = popSize;                    for(int i = 0 ; i < point_count ; i++){                    View template = inflater.inflate(R.layout.coin, null);                    gallery_center_point.addView(template);  //得到N个点,用于展示几个热点信息的,点图片处于信息下面                    }                    if(gallery_center_point.getChildCount() > 0){                    LinearLayout coin_layout = (LinearLayout)gallery_center_point.getChildAt(0);                    ImageView child_first = (ImageView)coin_layout.getChildAt(0);                    child_first.setImageResource(R.drawable.index_body_coin2);                    }                                            gallery_center.setAdapter(adapter_gallery_center);//设置图片适配器                        gallery_bottom.setAdapter(adapter_gallery_bottom);                                                gallery_center.setOnItemSelectedListener(osSelectedListener);                        gallery_bottom.setOnItemSelectedListener(osSelectedListener);                                                removeDialog(Const.PROGRESSBAR_WAIT);                                            _intent.putExtra("status", true);                        //开启多个线程去拉取图片------begin                        for(int i = 0; i < popSize; i++){                                                final String id = popFileList.get(i).getId();                        final String image_url = ImageUtil.getPicUrl(popFileList.get(i).getCoverImage(),2);                                                BitmapDownloaderTask task = new BitmapDownloaderTask(image_url){                                                @Override                        protected Bitmap doInBackground(String... params) {                        Bitmap bm = CacheManager.getInstance().getBitmap(id);                        if(bm==null){                        bm = ImageUtil.getBitmap(image_url);                        }                        return bm;                        }                                                @Override                        protected void onPostExecute(Bitmap bm) {                        if(isCancelled()){                        bm = null;                        }                        if(bm!=null){                                if(!CacheManager.getInstance().getBitmap_Map().containsKey(id)){                                CacheManager.getInstance().putBitmap(id, bm);                                }                                adapter_gallery_center.notifyDataSetChanged();                                }                        }                        };                        task.execute("");                        }                        //开启多个线程去拉取图片------end                    }else{                    Toast.makeText(_context, "信息不存在,请选择其它商品查看!", Toast.LENGTH_SHORT).show();                    }                        }else{            Toast.makeText(_context, "网络不稳定,请检查您的网络状态!", Toast.LENGTH_SHORT).show();            }                        removeDialog(Const.PROGRESSBAR_WAIT);            }                    };        showDialog(Const.PROGRESSBAR_WAIT);    asyncQueryHandler.doWork(new HashMap<String,String>()); //开始执行,进行调用excute得到热点信息bean,然后通过基类的机制,发给handleMessage(Message msg)处理。    



更多相关文章

  1. android异步下载图片
  2. 调用摄像头拍照并显示
  3. Android上下文Context全解析
  4. Android实现异步加载
  5. bindService的注意事项
  6. android 联系人搜索
  7. Android(安卓)Uri.getQueryParameter使用注意
  8. 调用getChildFragmentManager时出现的Bug
  9. Android(安卓)直接通过JNI访问驱动

随机推荐

  1. Android(安卓)Canvas类介绍
  2. Google Android(安卓)简介
  3. 作为一名Android开发者,你有过迷茫吗?
  4. 提示服务Notification在Android中的应用
  5. 第11章 Android的线程和线程池
  6. Android与服务器端数据交互(http协议整合s
  7. android利用XmlPullParse对XML进行解析读
  8. Android(安卓)Web App官方文档翻译第一章
  9. Freescale IMX6 Android(安卓)(4): 基于T
  10. 使用GridView时,多张图片被选中的效果