当前位置:Gxlcms > PHP教程 > 微博开发2客户端的BaseTask以及BaseTaskPool

微博开发2客户端的BaseTask以及BaseTaskPool

时间:2021-07-01 10:21:17 帮助过:4人阅读

  1. 因为微博程序中客户端与服务器端的数据传递有时会耗时很长,所以采用多进程异步处理,就是界面UI与数据的发送接收不在一个进程里。每次数据传输的时候会开一个新的线程。
  2. BaseTask就是这个记录异步任务属性的类
  3. package com.app.demos.base;
  4. public class BaseTask {
  5. public static final int TASK_COMPLETE = 0; //任务完成
  6. public static final int NETWORK_ERROR = 1; //网络错误
  7. public static final int SHOW_LOADBAR = 2; //显示下载条
  8. public static final int HIDE_LOADBAR = 3; //不显示下载条
  9. public static final int SHOW_TOAST = 4; //显示Toast
  10. public static final int LOAD_IMAGE = 5; //加载图片
  11. private int id = 0;
  12. private String name = "";
  13. public BaseTask() {}
  14. public int getId () {
  15. return this.id;
  16. }
  17. public void setId (int id) {
  18. this.id = id;
  19. }
  20. public String getName () {
  21. return this.name;
  22. }
  23. public void setName (String name) {
  24. this.name = name;
  25. }
  26. public void onStart () {
  27. }
  28. public void onComplete () {
  29. }
  30. public void onComplete (String httpResult) {
  31. }
  32. public void onError (String error) {
  33. }
  34. public void onStop () throws Exception {
  35. }
  36. }

下面就是BaseTaskPool,任务池的相关代码。

  1. package com.app.demos.base;
  2. import java.util.HashMap;
  3. import java.util.concurrent.ExecutorService;
  4. import java.util.concurrent.Executors;
  5. import android.content.Context;
  6. import com.app.demos.util.HttpUtil;
  7. import com.app.demos.util.AppClient;
  8. public class BaseTaskPool {
  9. // task thread pool
  10. static private ExecutorService taskPool;
  11. // for HttpUtil.getNetType
  12. private Context context;
  13. public BaseTaskPool (BaseUi ui) { //初始建立缓冲池
  14. this.context = ui.getContext();
  15. taskPool = Executors.newCachedThreadPool();
  16. }
  17. 根据不同的需求重载了addTask方法三次
  18. // http post task with params
  19. public void addTask (int taskId, String taskUrl, HashMap<string, string=""> taskArgs, BaseTask baseTask, int delayTime) {
  20. baseTask.setId(taskId);
  21. try {
  22. <span>taskPool.execute(new TaskThread(context, taskUrl, taskArgs, baseTask, delayTime));</span>
  23. } catch (Exception e) {
  24. taskPool.shutdown();
  25. }
  26. }
  27. // http post task without params
  28. public void addTask (int taskId, String taskUrl, BaseTask baseTask, int delayTime) {
  29. baseTask.setId(taskId);
  30. try {
  31. <span>taskPool.execute(new TaskThread(context, taskUrl, null, baseTask, delayTime));</span>
  32. } catch (Exception e) {
  33. taskPool.shutdown();
  34. }
  35. }
  36. // custom task
  37. public void addTask (int taskId, BaseTask baseTask, int delayTime) {
  38. baseTask.setId(taskId);
  39. try {
  40. <span>taskPool.execute(new TaskThread(context, null, null, baseTask, delayTime));</span>
  41. } catch (Exception e) {
  42. taskPool.shutdown();
  43. }
  44. }
  45. 异步创建任务进程
  46. // task thread logic
  47. private class TaskThread implements Runnable {
  48. private Context context;
  49. private String taskUrl;
  50. private HashMap<string, string=""> taskArgs;
  51. private BaseTask baseTask;
  52. private int delayTime = 0;
  53. public TaskThread(Context context, String taskUrl, HashMap<string, string=""> taskArgs, BaseTask baseTask, int delayTime) {
  54. this.context = context;
  55. this.taskUrl = taskUrl;
  56. this.taskArgs = taskArgs;
  57. this.baseTask = baseTask;
  58. this.delayTime = delayTime;
  59. }
  60. @Override
  61. public void run() {
  62. try {
  63. baseTask.onStart();
  64. String httpResult = null;
  65. // set delay time
  66. if (this.delayTime > 0) {
  67. Thread.sleep(this.delayTime);
  68. }
  69. try {
  70. // remote task
  71. if (this.taskUrl != null) {
  72. // init app client
  73. AppClient client = new AppClient(this.taskUrl); // 用到了上一讲的AppClient封装了基本的http 的post与get方法
  74. if (HttpUtil.WAP_INT == HttpUtil.getNetType(context)) {
  75. client.useWap();
  76. }
  77. // http get
  78. if (taskArgs == null) {
  79. httpResult = client.get();
  80. // http post
  81. } else {
  82. httpResult = client.post(this.taskArgs);
  83. }
  84. }
  85. // remote task
  86. if (httpResult != null) {
  87. baseTask.onComplete(httpResult);
  88. // local task
  89. } else {
  90. baseTask.onComplete();
  91. }
  92. } catch (Exception e) {
  93. baseTask.onError(e.getMessage());
  94. }
  95. } catch (Exception e) {
  96. e.printStackTrace();
  97. } finally {
  98. try {
  99. baseTask.onStop();
  100. } catch (Exception e) {
  101. e.printStackTrace();
  102. }
  103. }
  104. }
  105. }
  106. }</string,></string,></string,>


以上就介绍了微博开发2客户端的BaseTask以及BaseTaskPool,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

人气教程排行