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

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<P>import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Logpublic 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(new InputStreamReader(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", new JQuery.TaskListener() { @Overridepublic 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);}});

详细说明:http://android.662p.com/thread-239-1-1.html

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android(安卓)Studio 快捷键整理
  3. Android(安卓)Binder进程间通信深入分析
  4. Android(安卓)中自定义控件和属性
  5. 在代码中为选项卡添加内容
  6. android开发简单的计算器
  7. 系统音乐播放器暂停、播放的控制
  8. Android(安卓)EventBus你需要了解的都在这
  9. Android(安卓)OpenGL ES 绘图 --简单绘图

随机推荐

  1. php怎么做页面静态化
  2. php中的array_combine函数怎么用
  3. php levenshtein函数怎么用
  4. php中的count_chars函数怎么用
  5. php中的array_search函数怎么用
  6. php中的str_word_count函数怎么用
  7. php中的array_slice函数怎么用
  8. php中的similar_text函数怎么用
  9. php中的array_shift函数怎么用
  10. php中的substr_replace函数怎么用