close
颱風天啊!! 網路偶爾也會秀逗,LOAD東西上網路都會等很久,等待的時候,當然大家最討厭的就是一個一直在轉的圈圈,叫做Progress Bar(進度條)。TechOrange有一篇探討進度條的文章 【reBuzz專欄】等進度條等到生氣!四種加速時間感的心理學設計方法 滿有趣的。Brian是個沒耐心的user,只要等超過幾秒還在5%~10%這種水準,馬上就返回謝謝再連絡的,有關於Apple的放射性指標給使用者產生美好的錯覺,好像速度變快,我完全是贊同的。
今天就來把ProgressBar和AsyncTask搭配服用。
老闆教你做一件事,大概要想幾個過程:
其實這種放射狀的進度條已漸漸取代直式進度條,除了脈動感可讓使用者感覺速度變快,同時還存在另一個優點:一個不停運轉的圖形,會讓使用者瞭解到程式正在執行,而不會誤以為卡住而重覆按下執行鍵造成當機,這樣一來便可大幅地降低當機機率。也難怪 Apple 的 iOS 及 Mac OSX 系統總是較少出現死當情形。事實上,學習到ProgressBar發現這個一直轉的傢伙,和跑到多少一點關係都沒有。他只是一個單純一直在轉的傢伙! 你可以叫他出來(VISIBLE),也可以叫他滾(GONE)。
今天就來把ProgressBar和AsyncTask搭配服用。
- AsyncTask的生命週期
- ProgressBar植入畫面
- 插入程式碼
- 模擬器結果
老闆教你做一件事,大概要想幾個過程:
- 老闆給我指令去做
(靠杯真被動)Execute - 作事前準備 onPreExecute
- 做事的內容 doInBackGround
- 過程中回報 onProgressUpdate
- 結果回報 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多增幾分敬意啊!
無怪乎,開發app的老闆可以把到陳怡蓉。這名男子比34歲的陳怡蓉大四歲,是開發手機app遊戲程式的科技公司執行長
你看這社經地位,現在多麼崇高。(遠望)
全站熱搜
留言列表