实现在Android简单封装类似JQuery异步请求

在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.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(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() { 
@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);
}
});

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

原文地址:https://www.cnblogs.com/huasili/p/3432753.html