close
颱風天啊!! 網路偶爾也會秀逗,LOAD東西上網路都會等很久,等待的時候,當然大家最討厭的就是一個一直在轉的圈圈,叫做Progress Bar(進度條)。TechOrange有一篇探討進度條的文章 【reBuzz專欄】等進度條等到生氣!四種加速時間感的心理學設計方法 滿有趣的。Brian是個沒耐心的user,只要等超過幾秒還在5%~10%這種水準,馬上就返回謝謝再連絡的,有關於Apple的放射性指標給使用者產生美好的錯覺,好像速度變快,我完全是贊同的。
其實這種放射狀的進度條已漸漸取代直式進度條,除了脈動感可讓使用者感覺速度變快,同時還存在另一個優點:一個不停運轉的圖形,會讓使用者瞭解到程式正在執行,而不會誤以為卡住而重覆按下執行鍵造成當機,這樣一來便可大幅地降低當機機率。也難怪 Apple 的 iOS 及 Mac OSX 系統總是較少出現死當情形。
事實上,學習到ProgressBar發現這個一直轉的傢伙,和跑到多少一點關係都沒有。他只是一個單純一直在轉的傢伙! 你可以叫他出來(VISIBLE),也可以叫他滾(GONE)。
今天就來把ProgressBar和AsyncTask搭配服用。


  1. AsyncTask的生命週期
  2. ProgressBar植入畫面
  3. 插入程式碼
  4. 模擬器結果
1. AsyncTask的生命週期

老闆教你做一件事,大概要想幾個過程:

  1. 老闆給我指令去做(靠杯真被動) Execute
  2. 作事前準備 onPreExecute
  3. 做事的內容 doInBackGround
  4. 過程中回報 onProgressUpdate
  5. 結果回報 onPostExecute
紅色的部分是一定要有的,簡單的任務,老闆叫我去我就去,也不用回報也不管結果,那還挺常見的。

 onPreExecute, onProgressUpdate, 都可以在AsyncTask任務中右鍵選source-->Override/Implement Methods去新增。

2. ProgressBar植入畫面

其實非常簡單,只要把progressbar拉入layout activity裡面就可以了,有大有小,還可以選擇預設出現或是不出現,給他id就可以去程式碼用了!


3. 插入程式碼

比如果連線任務啟動的時候,開啟progressbar,連線結束讀到資料後progressbar消失。
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
ProgressBar progress= (ProgressBar)findViewById(R.id.progress);progress.setVisibility(View.GONE); -->任務結束progressbar消失protected void onPreExecute() {
super.onPreExecute();
ProgressBar progress= (ProgressBar)findViewById(R.id.progress);
progress.setVisibility(View.VISIBLE); -->開始任務前顯示progressbar,開始轉

}
在doInBackground的時候,把要做的事寫進去。任務寫進去很容易忘記要把結果result回傳,就跑不出來,最後一定要加上啟動器execute。

另外,加一個新功能,連線玩讓主畫面睡覺n秒鐘再顯示。
Thread.sleep(n*1000);
完整程式如下: 

4. 最後,來跑模擬器!

打入帳號密碼後,按下"登入",立即產生progressbar,接著AsyncTask連線去網路check帳號密碼,正確後跳到功能選單。


其實看來很簡單的東西,卻有很多觀念在裡面,對coder多增幾分敬意啊!
你看這社經地位,現在多麼崇高。(遠望)

arrow
arrow
    全站熱搜

    brianc18 發表在 痞客邦 留言(0) 人氣()