Rumah pembangunan bahagian belakang tutorial php 微博开发2客户端的BaseTask以及BaseTaskPool

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

Aug 08, 2016 am 09:31 AM
context public string

  因为微博程序中客户端与服务器端的数据传递有时会耗时很长,所以采用多进程异步处理,就是界面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 {

	}
	
}
Salin selepas log masuk

下面就是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);
						}
					}
					// 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();
				}
			}
		}
	}
	
}</string></string></string>
Salin selepas log masuk


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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tukar jenis data asas kepada rentetan menggunakan fungsi String.valueOf() Java Tukar jenis data asas kepada rentetan menggunakan fungsi String.valueOf() Java Jul 24, 2023 pm 07:55 PM

Tukar jenis data asas kepada rentetan menggunakan fungsi String.valueOf() Java Dalam pembangunan Java, apabila kita perlu menukar jenis data asas kepada rentetan, kaedah biasa ialah menggunakan fungsi valueOf() kelas String. Fungsi ini boleh menerima parameter jenis data asas dan mengembalikan perwakilan rentetan yang sepadan. Dalam artikel ini, kami akan meneroka cara menggunakan fungsi String.valueOf() untuk penukaran jenis data asas dan menyediakan beberapa contoh kod untuk

Bagaimana untuk menukar tatasusunan char kepada rentetan Bagaimana untuk menukar tatasusunan char kepada rentetan Jun 09, 2023 am 10:04 AM

Kaedah menukar tatasusunan char kepada rentetan: Ia boleh dicapai dengan penugasan Gunakan sintaks {char a[]=" abc d\0efg ";string s=a;} untuk membenarkan tatasusunan char terus memberikan nilai kepada rentetan, dan laksanakan. kod untuk melengkapkan penukaran.

Apakah perbezaan antara versi pembangun dan versi awam iOS? Apakah perbezaan antara versi pembangun dan versi awam iOS? Mar 01, 2024 pm 12:55 PM

Setiap tahun sebelum Apple mengeluarkan versi utama baharu iOS dan macOS, pengguna boleh memuat turun versi beta beberapa bulan lebih awal untuk mengalaminya terlebih dahulu. Memandangkan perisian ini digunakan oleh orang awam dan pembangun, Apple telah melancarkan versi pembangun dan awam, yang merupakan versi beta awam bagi versi beta pembangun, untuk kedua-duanya. Apakah perbezaan antara versi pembangun dan versi awam iOS? Secara literal, versi pembangun ialah versi ujian pembangun dan versi awam ialah versi ujian awam. Versi pembangun dan versi awam menyasarkan khalayak yang berbeza. Versi pembangun digunakan oleh Apple untuk ujian oleh pembangun Anda memerlukan akaun pembangun Apple untuk memuat turun dan meningkatkannya.

2w perkataan penjelasan terperinci String, yyds 2w perkataan penjelasan terperinci String, yyds Aug 24, 2023 pm 03:56 PM

Salam semua, hari ini saya akan berkongsi dengan anda pengetahuan asas Java: String. Tidak perlu diperkatakan kepentingan kelas String, ia boleh dikatakan sebagai kelas yang paling banyak digunakan dalam pembangunan back-end kami, jadi adalah perlu untuk membincangkannya.

Gunakan fungsi String.replace() Java untuk menggantikan aksara (rentetan) dalam rentetan Gunakan fungsi String.replace() Java untuk menggantikan aksara (rentetan) dalam rentetan Jul 25, 2023 pm 05:16 PM

Gantikan aksara (rentetan) dalam rentetan menggunakan fungsi String.replace() Java Dalam Java, rentetan ialah objek tidak boleh ubah, yang bermaksud apabila objek rentetan dicipta, nilainya tidak boleh diubah suai. Walau bagaimanapun, anda mungkin menghadapi situasi di mana anda perlu menggantikan aksara atau rentetan tertentu dalam rentetan. Pada masa ini, kita boleh menggunakan kaedah replace() dalam kelas String Java untuk melaksanakan penggantian rentetan. Kaedah replace() kelas String mempunyai dua jenis:

Gunakan fungsi String.length() java untuk mendapatkan panjang rentetan Gunakan fungsi String.length() java untuk mendapatkan panjang rentetan Jul 25, 2023 am 09:09 AM

Gunakan fungsi String.length() Java untuk mendapatkan panjang rentetan Dalam pengaturcaraan Java, rentetan ialah jenis data yang sangat biasa Kita selalunya perlu mendapatkan panjang rentetan, iaitu bilangan aksara dalam rentetan. Di Java, kita boleh menggunakan fungsi length() kelas String untuk mendapatkan panjang rentetan. Berikut ialah kod contoh mudah: publicclassStringLengthExample{publ

Cara menggunakan kaedah split dalam Java String Cara menggunakan kaedah split dalam Java String May 02, 2023 am 09:37 AM

Kaedah split dalam String menggunakan kaedah split() String untuk memisahkan String mengikut aksara atau rentetan yang masuk dan mengembalikan tatasusunan split. 1. Penggunaan umum Apabila menggunakan aksara umum, seperti @ atau, sebagai pemisah: Stringaddress="Shanghai@Shanghai City@Minhang District@Wuzhong Road";String[]splitAddr=address.split("@");System .out. println(splitAddr[0]+splitAddr[1]+splitAddr[2]+splitAddr[3

Cara menggunakan konteks untuk melaksanakan caching permintaan dalam Go Cara menggunakan konteks untuk melaksanakan caching permintaan dalam Go Jul 22, 2023 pm 10:51 PM

Cara menggunakan konteks untuk melaksanakan caching permintaan dalam Go Pengenalan: Semasa membina aplikasi web, kita selalunya perlu cache permintaan untuk meningkatkan prestasi. Dalam bahasa Go, kita boleh menggunakan pakej konteks untuk melaksanakan fungsi caching permintaan. Artikel ini akan memperkenalkan cara menggunakan pakej konteks untuk melaksanakan caching permintaan dan menyediakan contoh kod untuk membantu pembaca memahami dengan lebih baik. Apakah konteks? : Dalam bahasa Go, pakej konteks menyediakan cara untuk lulus antara berbilang goroutine

See all articles