摘要:使用Android系統(tǒng)的AsynTask異步處理機制,可以很好地解決在移動應(yīng)用中,由于帶寬有限和數(shù)據(jù)量爆增所帶來的問題,極大的提高了應(yīng)用的可操作性,豐富了用戶的使用體驗。
關(guān)鍵詞:Android;異步機制;移動投票
中圖分類號:TP391 文獻標(biāo)識碼:A 文章編號:1674-7712 (2012) 06-0093-01
在省級項目《吉林地區(qū)大學(xué)生網(wǎng)絡(luò)應(yīng)用狀況的研究與對策》的調(diào)研過程中,發(fā)現(xiàn)在大學(xué)生中,智能手機的應(yīng)用已經(jīng)相當(dāng)普遍。智能手機以其功能強大豐富和小巧易攜等優(yōu)點,已經(jīng)超越了簡單通訊工具的范疇,很多學(xué)生通過智能手機進行溝通交流、學(xué)習(xí)和娛樂,智能手機已經(jīng)成為廣大學(xué)生的不可或缺的貼身伴侶。在對學(xué)生的網(wǎng)絡(luò)應(yīng)用狀況進行調(diào)查的時候,項目組認(rèn)識到通過手機進行調(diào)查,將能夠更加方便的讓學(xué)生進行投票,也能夠更加容易的獲得調(diào)查結(jié)果,因此項目組決定嘗試開發(fā)基于Android智能手機的移動投票系統(tǒng),作為最新的數(shù)據(jù)統(tǒng)計渠道。
Android系統(tǒng)的市場占有率達(dá)70%以上,在大學(xué)生中更是首選,基于Android系統(tǒng)的移動投票系統(tǒng),基本可以覆蓋大部分的學(xué)生。為了避免因為移動網(wǎng)絡(luò)帶寬有限,而導(dǎo)致大量學(xué)生同時投票時,出現(xiàn)網(wǎng)絡(luò)訪問不暢、無法投票和無法實時查看投票結(jié)果的情況,應(yīng)在投票系統(tǒng)中采用異步處理機制,以保證投票的實時性和準(zhǔn)確性。在Android中提供了專門的AsynTask類進行異步處理,Asyntask機制簡單易用,它將所有的線程通信都封裝成回調(diào)函數(shù),調(diào)用邏輯清晰,尤其是在異步處理結(jié)束之后,有回調(diào)函數(shù)進行收尾處理,方便進行結(jié)果的統(tǒng)計和輸出。本文將通過實例對Android系統(tǒng)的AsynTask類的一部處理機制進行深入分析,以便更好的應(yīng)用于移動投票系統(tǒng)。
一、AsynTask類的結(jié)構(gòu)
AsynTask類直接繼承自java.lang.object類,主要用到的幾個內(nèi)部回調(diào)函數(shù)有:doInBackGround()、onPreExecute()、onPostExecute()和onProgressUpdate(),正是這幾個回調(diào)函數(shù)構(gòu)成了AsynTask類的使用邏輯結(jié)構(gòu)。
二、回調(diào)邏輯關(guān)系
1.主線程調(diào)用AsynTask子類實例的execute()方法后,首先會調(diào)用onPreExecute()方法。
2.之后啟動新線程,調(diào)用doInBackground()方法,進行異步數(shù)據(jù)處理。
3.處理完畢之后異步線程結(jié)束,在主線程中調(diào)用onPostExecute()方法。
三、各個函數(shù)間數(shù)據(jù)的傳遞
其數(shù)據(jù)傳遞關(guān)系如下:
由execute()方法向doInBackground()傳遞,doInBackground()方法的返回值會傳遞給onPostExecute()方法。publishProgress()方法向progressUpdate()方法傳遞。
傳遞的數(shù)據(jù)的類型應(yīng)該為數(shù)組,數(shù)組都是可變長的,應(yīng)根據(jù)具體情況使用。
四、AsynTask機制的java實現(xiàn)代碼
public class AnsyTestActivity extends Activity {
TextView text =1;
Button button=1;
String str=1;
AnsyTry anys=1;
double result=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text=(TextView) findViewById(R.id.text);
button=(Button) findViewById(R.id.button);
str=\"wei\";
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
anys=new AnsyTry(text);
anys.execute(str); } }); }
class AnsyTry extends AsyncTask
TextView te=1;
public AnsyTry(TextView te) {
super();
this.te = te; }
@Override
protected Double doInBackground(String... params) {
double dou=0;
if(params[0].equals(\"wei\")){
System.out.println(Thread.currentThread().getName()+\"recive wei\");
dou=100; }
publishProgress(te);
return dou; } }}
通過AsynTask異步機制的應(yīng)用,移動投票系統(tǒng)在應(yīng)用中表現(xiàn)良好。在接受學(xué)生集中投票和實時統(tǒng)計分析的數(shù)據(jù)高峰期,AsynTask異步機制很好的將投票和查看統(tǒng)計結(jié)果的功能,分配給不同的線程,從而避免了網(wǎng)絡(luò)堵塞情況的發(fā)生,保證了投票數(shù)據(jù)的及時性和準(zhǔn)確性。
參考文獻
[1]楊豐盛.Android應(yīng)用開發(fā)揭秘[M].北京:機械工業(yè)出版社
[2]何孟翰.Google Android SDK開發(fā)實戰(zhàn)演練[M].北京:人民郵電出版社