◎ 範例程式的目的:
1. 透過Handler實現線程間的通訊。
2. 在主線程當中實現Handler的handleMessage()方法。
3. 在Worker Thread當中透過Handler發送消息。
◎ 範例程式的主題:
利用Worker Thread發送消息給Main Thread,即使用者按下發送按鈕後,模擬向網路伺服器獲取數據的休眠2秒鐘,之後再將獲取到的數據更新到使用者觀看的介面上(即TextView)。
◎ 程式碼
◎ 範例程式的目的:
1. 透過Handler實現線程間的通訊。
2. 在主線程當中實現Handler的handleMessage()方法。
3. 在Worker Thread當中透過Handler發送消息。
◎ 範例程式的主題:
利用Worker Thread發送消息給Main Thread,即使用者按下發送按鈕後,模擬向網路伺服器獲取數據的休眠2秒鐘,之後再將獲取到的數據更新到使用者觀看的介面上(即TextView)。
◎ 程式碼
◎ 什麼是Handler和Looper?
1. Handler、Looper和MessageQueue是組成「消息傳遞機制」的重要原素。
2. Handler是一個類,其負責把消息物件「加到」消息隊列(其又可稱為訊息佇列MessageQueue,為採用先進先出法的隧道)裡。
3. Looper負責不斷地將消息物件從消息隊列中「取出」來。而如果消息隊列中無消息物件的話,則Looper會造成阻塞,即等待的狀態。
◎ Handler、Looper和MessageQueue的基本原理
◎ 回顧Java當中的線程概念
1. 線程的二種實現方式:繼承Thread類(其代表的是線程)或實現Runnable接口(其只僅代表線程體,即線程需執行的程式碼)。
2. 線程的生命週期:創建線程à調用線程start的方法à線程進入就緒狀態à搶到CPU就可進入到運行狀態à如被其它的線程搶走CPU或進入阻塞狀態(如sleep方法),則進入就緒狀態à一直反覆,直到線程體執行完,則該線程就算是執行完了à線程進入死亡狀態。
※當一個線程進入死亡狀態的話,就不可能再復活了。
3. 多線程同步(即同步代碼塊),用於解決多線程同時執行與使用同一資源所可能會產生的誤差之問題。而同步時,只允許一個線程來使用該資源。
◎ Android當中的線程介紹 - Main Thread(主/UI線程)與Worker Thread(其它線程)
◎ Intent物件的基本概念
1. Intent是Android應用程序組件(即零件)之一。
2. Intent物件在Android系統當中表示一種「意圖」。
3. Intent當中最重要的內容是action與data。
◎ Intent物件的基本使用方法
◎ Activity物件的狀態
1. Resumed:Activity物件處於正常的運行狀態;
2. Paused:另一個Activity位於前端,但是本Activity還可見(即位於前端的Activity為對話框類的物件);
3. Stopped:另一個Activity位於前端,完全遮擋本Activity。
※ 一個Activity處於Paused或Stopped狀態時,並不表示其會釋放內存的空間,如需釋放空間的話,需以手動的方式去釋放之。
◎ 成對的生命週期函數
◎ 什麼是生命週期?
以人為例,即人有幼年(其階段工作為吃、睡、玩)、青年(其階段中主要的工作為學習)、壯年(其階段中主要的工作為工作、結婚)…等,而相對的物件也有生命週期,一個物件從創建到運行,及執行各式各樣的任務,並到最終的被銷毀等階段,我們也可稱其為物件的生命週期。
◎ Activity的生命週期函數與其調用時機
▲ Activity運行流程圖(長方形代表callback methods(回呼函式),可以做出想要處理的事情,有顏色的部份就是實際Activity會處於的狀態)
◎ 如何在一個應用程序當中定義多個Activity
定義步驟如下:
1. 定義一個類,繼承Activity。
2. 在該類當中,複寫Activity當中的onCreate方法。(SourceàOverride/Implement Methods…àActivity/onCreate(Bundle))
3. 建立一個新的佈局文件。
4. 在AndroidManifest.xml文件當中註冊該Activity,而其最少需撰寫出「name」(該activity的名稱,即包名+類名)和「label」(activity顯示的名稱)此二個屬性。
◎ SeekBar的介紹 - SeekBar的主要屬性與OnSeekBarChangeListener之使用
1. SeekBar的進度條是「可拖動」,與上一篇所介紹的不可拖動之ProgressBar使用大不相同。SeekBar大多運用在「影音播放器」上。
2. SeekBar的主要屬性為:
(1) 進度條最大值:max
(2) 當前進度:progress
(3) 次要進度的值:SecondaryProgress
3. SeekBar監聽器 – OnSeekBarChangeListener中三個重要的方法:
(1) onProgressChanged(SeekBar seekBar, int progress, boolean fromUser):用於SeekBar的Progress出現了變化,就會觸發該監聽器,例如:使用者往前/後拖拉進度條時。
參數介紹:
seekBar-觸發監聽器的SeekBar的物件;
progress-當前SeekBar的進度;
fromUser-判斷該變化是否由使用者所引起的,因變化可分成影音播放時自動的往前跑(該值為false),以及使用者自行拖拉(該值為true)這二種,所以需透過此一參數來分別做不同的處理。
(2) onStartTrackingTouch(SeekBar seekBar):當使用者「開始」拖拉進度條時,將會調用此一方法。
(3) onStopTrackingTouch(SeekBar seekBar):當使用者「停止」拖拉進度條時,將會調用此一方法。
◎ Android當中的進度條與其之間種類的關係
▲ 進度條的種類
▲ 各種進度條的關係
1. ProgressBar是SeekBar與Rating的父類。
2. ProgressBar的Style,分為:
◎ TimePicker的使用方法
1. TimePicker用於「時間」的選擇。
2. OnTimeChangedListener用於監聽TimePicker的一些行為,並做出相應的處理。
◎ RelativeLayout佈局的新屬性(Android 4.2版)
1. android:layout_alignStart:對齊至起始的位置,參數值需為相對應的控件ID。
2. android:layout_alignEnd:對齊至終點的位置,參數值需為相對應的控件ID。
3. android:layout_alignParentStart:對齊至父控件起始的位置,參數值為true或false。
4. android:layout_alignParentEnd:對齊至父控件終點的位置,參數值為true或false。
◎ 相對佈局練習-登入介面
◎ 什麼是相對佈局(RelativeLayout)?
1. RelativeLayout是另外一種控件擺放的方式。
2. RelativeLayout是透過指定當前控件與兄弟控件或者是父控件之間的相對位置,從而達到控制控件位置的目的。
◎ 為什麼要使用RelativeLayout?
以上篇所講的猜拳遊戲之版面為例,如果為了實現該版面的話,需使用多個LinearLayout互嵌,因此其複雜度也相對的提高許多,更遑論UI的性能了。
◎相對佈局(RelativeLayout)的基本思路與優勢
◎ 圖片視圖(ImageView)的基本概念
1. 在XML文件當中使用<ImageView/>標籤
2. 在代碼當中使用ImageView的物件表示
3. ImageView用於裝圖片的容器
◎ <ImageView/>與ImageView之間的關係與程式範例
◎ ScaleType屬性之介紹
● ScaleType使用時機
◎ 單選按鈕(RadioButton)的基本概念
1. 在XML文件當中使用<RadioButton/>和<RadioGroup/>標籤
2. 在代碼當中使用RadioGroup與RadioButton的物件表示
3. 常用OnClickListener與OnCheckedChangeListener監聽器
◎ RadioGroup與RadioButton之間的關係
RadioGroup除了用於限定該群組中所包含的RadioButton是同一組的之外,在同一組中的選項只能被單選出一個。
◎ OnCheckedChangeListener與OnClickListener監聽器程式範例
◎ 多選按鈕(CheckBox)的基本概念
1. 在XML文件當中使用<CheckBox/>標籤
2. 在代碼當中使用CheckBox的物件表示
3. 常用OnClickListener與OnCheckedChangeListener監聽器
◎ OnClickListener監聽器程式範例
◎ 顯示單位
Android 允許我們使用的單位有 px (pixels), dip (device independent pixels), sp (scaled pixels), pt (points), in (inches), mm (millimeters)等,下述將介紹px、dp及sp:
● px 像素
這些訊息元素大多採用點或者方塊等方式顯示,而每個像素可有各自的顏色值,其是以三原色(紅、綠、藍)/RGB色域等來顯示。
在固定的單位面積內所包含的像素越多,即代表解析度越高,其所顯示的圖像就會越接近於真實物體。
● dp 設備獨立像素
什麼是dp?
◎ 控件佈局的基本概念
● 什麼是控件佈局?
指控制控件在Activity當中的位置、大小、顏色,以及其它控件樣式屬性的方法。
● 怎麼控制控件佈局?
方法一:使用佈局文件完成控件佈局 (靜態)。
方法二:在Java代碼當中完成控件佈局 (動態)。
● 控件佈局的種類
Layout類
Linear Layout:線形佈局,其較常用於學習時使用。
Relative Layout:相對佈局,其為日常生活中較常使用之佈局方式。
View類
List View:清單式佈局。
Grid View:網格式佈局清單式佈局。
◎ 線形佈局(LinearLayout)的基本使用方法
● 如何產生一新的佈局文件?
◎ View的基本概念
● 什麼是View?
即在Acivity上所顯示的控件,就稱之為「View」。所以,View是所有控件的「父類」。
● View的種類
◎ 如何設置View的屬性?在Activity當中如何獲取與控制代表View的物件?