因为微博程序中客户端与服务器端的数据传递有时会耗时很长,所以采用多进程异步处理,就是界面UI与数据的发送接收不在一个进程里。每次数据传输的时候会开一个新的线程。
BaseTask就是这个记录异步任务属性的类
package com.app.demos.base;
public class BaseTask {
public static final int TASK_COMPLETE = 0; //任务完成
public static final int NETWORK_ERROR = 1; //网络错误
public static final int SHOW_LOADBAR = 2; //显示下载条
public static final int HIDE_LOADBAR = 3; //不显示下载条
public static final int SHOW_TOAST = 4; //显示Toast
public static final int LOAD_IMAGE = 5; //加载图片
private int id = 0;
private String name = "";
public BaseTask() {}
public int getId () {
return this.id;
}
public void setId (int id) {
this.id = id;
}
public String getName () {
return this.name;
}
public void setName (String name) {
this.name = name;
}
public void onStart () {
}
public void onComplete () {
}
public void onComplete (String httpResult) {
}
public void onError (String error) {
}
public void onStop () throws Exception {
}
}
下面就是BaseTaskPool,任务池的相关代码。
package com.app.demos.base;
import java.util.HashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.content.Context;
import com.app.demos.util.HttpUtil;
import com.app.demos.util.AppClient;
public class BaseTaskPool {
// task thread pool
static private ExecutorService taskPool;
// for HttpUtil.getNetType
private Context context;
public BaseTaskPool (BaseUi ui) { //初始建立缓冲池
this.context = ui.getContext();
taskPool = Executors.newCachedThreadPool();
}
根据不同的需求重载了addTask方法三次
// http post task with params
public void addTask (int taskId, String taskUrl, HashMap<String, String> taskArgs, BaseTask baseTask, int delayTime) {
baseTask.setId(taskId);
try {
<span>taskPool.execute(new TaskThread(context, taskUrl, taskArgs, baseTask, delayTime));</span>
} catch (Exception e) {
taskPool.shutdown();
}
}
// http post task without params
public void addTask (int taskId, String taskUrl, BaseTask baseTask, int delayTime) {
baseTask.setId(taskId);
try {
<span>taskPool.execute(new TaskThread(context, taskUrl, null, baseTask, delayTime));</span>
} catch (Exception e) {
taskPool.shutdown();
}
}
// custom task
public void addTask (int taskId, BaseTask baseTask, int delayTime) {
baseTask.setId(taskId);
try {
<span>taskPool.execute(new TaskThread(context, null, null, baseTask, delayTime));</span>
} catch (Exception e) {
taskPool.shutdown();
}
}
异步创建任务进程
// task thread logic
private class TaskThread implements Runnable {
private Context context;
private String taskUrl;
private HashMap<String, String> taskArgs;
private BaseTask baseTask;
private int delayTime = 0;
public TaskThread(Context context, String taskUrl, HashMap<String, String> taskArgs, BaseTask baseTask, int delayTime) {
this.context = context;
this.taskUrl = taskUrl;
this.taskArgs = taskArgs;
this.baseTask = baseTask;
this.delayTime = delayTime;
}
@Override
public void run() {
try {
baseTask.onStart();
String httpResult = null;
// set delay time
if (this.delayTime > 0) {
Thread.sleep(this.delayTime);
}
try {
// remote task
if (this.taskUrl != null) {
// init app client
AppClient client = new AppClient(this.taskUrl); // 用到了上一讲的AppClient封装了基本的http 的post与get方法
if (HttpUtil.WAP_INT == HttpUtil.getNetType(context)) {
client.useWap();
}
// http get
if (taskArgs == null) {
httpResult = client.get();
// http post
} else {
httpResult = client.post(this.taskArgs);
}</span>
}
// remote task
if (httpResult != null) {
baseTask.onComplete(httpResult);
// local task
} else {
baseTask.onComplete();
}
} catch (Exception e) {
baseTask.onError(e.getMessage());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
baseTask.onStop();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}以上就介绍了微博开发2客户端的BaseTask以及BaseTaskPool,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号