在android开发中经常会使用异步请求数据,通常会使用handler或者AsyncTask去做,handler 配合message 使用起来比较麻烦,AsyncTask 线程池只允许128个线程工作,会有溢出的问题,(当然一般情况不会有那么多线程同时工作的)所以写了这个代码,还望高手指正!

[Java]代码 package com.xbl.task;  import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;  import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log;   public class JQuery {      private static final String KEY = "key";   private static String TAG = "JQuery";   private static final int N = 5;// 5个工人   private static final Executor worker = Executors.newFixedThreadPool(N);// 线程池   private static final Handler handler = new Handler(){     @Override     public void handleMessage(Message msg) {       TaskListener listener = (TaskListener)msg.obj;       Object result = msg.getData();       if(listener !=null ){         listener.callBack(result);       }       destory();     }   };      private JQuery(){      }      public static void execute(final String url,final TaskListener listener){     worker.execute(new Runnable() {       @Override       public void run() {         String result = null;         try {           result = WebUtil.get(url);         } catch (Exception e) {           Log.e(TAG, e.getMessage());         }                  Message msg = new Message();         Bundle data = new Bundle();         data.putSerializable(KEY, result);         msg.setData(data);         msg.obj = listener;         handler.sendMessage(msg);       }     });   }      //销毁线程   private static void destory() {     if (worker != null && worker instanceof ExecutorService) {       ExecutorService es = (ExecutorService) worker;       if (!es.isShutdown()) {         es.shutdown();       }     }   }       public interface TaskListener{     public void callBack(Object result);   }   /**    *    * 不必太在意此处代码,只是示例    *    */   public static class WebUtil{          public static String get(String url) throws Exception{       InputStream inputStream = new URL(url).openStream();       StringBuilder strBuilder = new StringBuilder();       BufferedReader reader = new BufferedReader(newInputStreamReader(inputStream));       for (String s = reader.readLine(); s != null; s = reader.readLine())         strBuilder.append(s);              inputStream.close();       return strBuilder.toString();     }   } }[代码] [Java]代码 //调用方法: JQuery.execute("http://weather.news.qq.com/inc/minisite_125.js", newJQuery.TaskListener() {                @Override         public void callBack(Object result) {           TextView t = new TextView(TaskDemoActivity.this);           t.setText(String.valueOf(result));           LinearLayout layout = (LinearLayout)findViewById(R.id.layout1);           layout.addView(t);         }       });

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. android 实现GridView多选效果
  3. 【Android开发那点破事】解决Andriod使用HttpURLConnection 失败
  4. Android之RecyclerView简单使用(三)
  5. Android(安卓)IPC机制—Binder的工作机制
  6. 如何添加 android private libraries 中的包的源代码
  7. 【android】AsyncTask完全剖析(一)
  8. Android(安卓)RoboGuice 使用指南(1):概述
  9. [置顶] Android硬件加速

随机推荐

  1. Android(安卓)计算器
  2. android按钮按下的效果
  3. Android(安卓)5.0(L) 的MediaSession架构
  4. android通知栏提示
  5. Android(安卓)获取Sim卡联系人
  6. android 蓝牙各种UUID
  7. android给View设置边框 填充颜色 弧度
  8. Intent.FLAG 属性大全
  9. Android中帧动画
  10. Android悬浮窗口