1. 程式人生 > >《Androi Studio實戰》學習筆記(三)

《Androi Studio實戰》學習筆記(三)

第十章 貨幣實驗:第2部分

      重點關注MainActivity的功能並完成該App;使用ArrayAdapter把字串陣列繫結到選擇列表;使用Android Srudio把檢視行為的處理代理到包含他們的Activity;學習如何使用共同偏好以及資源;學習Android中的併發,尤其是如何使用AsynsTask;修改佈局並使用Android Studio生成可繪製資源。

10.1定義MainActivity的成員

       首先在MainActivity類中定義activity_main.xml佈局檔案中對應檢視的引用,然後將物件賦值給它們。

       *我們僅在MainActivity裡面為activity_main.xml中那些之前已經分配了ID的檢視定義引用。

        *setContentView(R.layout.activity_main)語句會使用activity_main.xml中包含的檢視進行填充。

         *在Android中,單詞inflate表示當Android遍歷activity_main.xml佈局中定義的檢視時,它會將每個檢視初始化為對上的Java物件。

         *如果View物件有ID,那麼Android將會把物件的記憶體位置與其ID關聯起來。

          *這種聯絡可以在自動生成的名為R.java的檔案中找到,它是資源和Java原始檔的橋樑。

         在把佈局及其所有檢視填充到記憶體空間中以後,通過呼叫findViewById()方法並傳入ID值可以把這些物件賦值給我們之前定義的引用。findViewById()方法返回一個View兌現個,它是Android中所有View和ViewGroup的祖先;而這也是我們需要將其返回值轉換成適當View子類的原因。

10.2從bundle中解壓出貨幣程式碼

10.3建立選項選單

       app:showAsAction屬性決定了選單項的位置。將此屬性設定為never,表示此選單項永遠不會出現在操作欄上,而是總出現在溢位選單中。(溢位選單有操作欄右側三個豎直的點來表示)

       android:orderInCategory用於設定選單項的次序。Android中的約定是使用100的倍數,例如可以用250在200和300之間插入一個新的選單項。orderInCategory屬性必須是整數,因此如果開始時使用諸如2和3這樣的連續值,那麼將會沒有插入中間值的空間,而我們也不得不重新排序整個集合。

10.4實現選項選單行為

要求使用者授權並獲得對裝置網路狀態的訪問許可權。

10.5建立spinner_closed佈局

為處於關閉狀態的選擇列表建立佈局

10.6將mCurrencies繫結到選擇列表

       我們需要將mCurrencies繫結到選擇列表。uao實現此功能,我們將使用一個名為ArrayAdapter的類。

       ArrayAdapter建構函式接受三個引數:上下文、佈局和一個數組

10.7將選擇列表行為代理給MainActivity

       Java事件模型極其靈活。

        我們可以將時間的處理代理到實現了相應監聽器介面的任意物件。

        如果檢視是唯一的,那麼將其行為處理代理到一個匿名內部類是有意義的。

        然而如果佈局中包含相同型別的多個檢視,比如Currencies App中包含兩個或更多個選擇列表這種情況,那麼將這些檢視的處理代理到包含它們的類通常是更為簡便的方法。

10.8建立偏好管理器

可以將共同偏好儲存在使用者裝置上的檔案中。這種檔案是序列化的雜湊表,儲存著鍵/值對,而且每個App都可以擁有過自己的共同偏好。

        共同偏好中可以儲存的值型別被限定為Java基本資料型別、字串、序列化物件和序列化物件陣列。

         與SQLite讀寫資料相比,共同偏好會慢一些。因此,不應該考慮將共同偏好用作記錄管理,而應將SQLite資料庫用作記錄管理。即便如此,共同偏好仍是持久化儲存使用者偏好的一種好方法。

        通過建立一個能夠訪問共同偏好的使用工具類。此實用工具類將含有公共的靜態方法,允許我們獲取和設定使用者所選本國和外國貨幣的貨幣程式碼。

10.9根據給定程式碼查詢位置

10.10從貨幣字串中抽取程式碼

10.11實現共同偏好

共同偏好中的資料儲存在雜湊表中,其中鍵總是字串,因此很適合將鍵定義為String常量。

10.12按鈕單擊行為

10.13儲存開發者金鑰    

keys.properties

            獲取免費金鑰 https://openexchangerates.org/signup/free

10.14獲取開發者金鑰

檔案I/O是一個耗時的操作,定義一個getKey()方法包含這樣的操作,需要儘可能少地呼叫getKey()方法。我們將在onCreate()中呼叫一次這個方法並在MainActivity的成員mKey中儲存這個值,而非每次要獲取匯率時都呼叫。

10.15 CurrencyConverterTask

Adroid併發的第一條規則是不要阻塞UI執行緒,也就是主執行緒。阻塞UI執行緒不僅會導致ANR錯誤,還會然供使用者介面完全失去響應。

       Android併發的第二條規則是UI執行緒是唯一一個擁有和使用者介面互動許可權的執行緒。當嘗試從後臺執行緒中更新任意檢視,App將會崩潰。

       AsyncTask類專門用於結局這些問題,因此它是Android併發的推薦事項方式。如果正確實現了AsyncTask,你便已經遵守了Android併發的這兩條規則。

       AsyncTask含有名為doInBackground()的抽象方法,所有具體類都需要過載它。此外可以過載其他的一些方法,包括onPreExecute()、onProgressUpdate()和onPostExecute()。

       *AsyncTask的魔力在於doInBackground()方法在後臺執行緒中只想,而其他方法均在UI執行緒中執行。只要在doInBackground()中不操作任何試圖,就可以非常安全地使用AsyncTask

10.15.1onPreExecute()

        onPreExecute()方法在UI執行緒中執行,它發上在啟動doInBackground()方法之前。由於我們無法在後臺執行緒中操作任何UI檢視,因此onPreExecute()方法提供了在doInBackground()啟動之前修改UI的機會。當onPreExecute()被呼叫時會顯示ProgressDialog,它帶有Cancel按鈕,使用者可以單擊並終止操作。

10.15.2 doInBackground()

       該方法是AsyncTask中excute()方法的代理。其引數被定義為可變引數,因此我們可以像execute()傳入任意數量、型別為String的逗號分隔引數,可用params[0]來引用第一個元素。

10.15.3 onPostExecute()

       doinBackground()的返回值被定義為JSONObject。相同的物件被作為引數傳入onPostExecute()方法,當進入onPostExecute()方法時,doInBackground()方法的後臺執行緒已經結束,現在可以使用從doInBackground()獲取到的JSONObject資料安全地更新UI。最後做些計算並將格式化好的結果賦值給mConvertedTextView。

10.16按鈕選擇器

10.17啟動圖示

第11章 測試和分析

        儀器測試;Monkey,是一款AndroidSDK自帶的優秀工具,可以生成用於App壓力測試的隨機UI 事件;Android Studio中的一些分析工具。

11.1建立新的儀器測試

     本節將學習通過繼承android.test.ActivityInstrumentationTestCase2類來建立儀器測試。

11.1.1定義SetUp()和TearDown()   (男默女淚?)

       SetUp()方法讓你能夠連線所需的任意資源,通過bundle傳入任意資料或者在執行測試之前複製引用。

       TearDown()方法可以用於關閉所有連結以及在測試方法執行完之後清理所有資源。

        在MainActivityTest中,將以幾乎完全像同的方式獲取MainActivity中檢視的引用。我們需要一個對MainActivity的引用。ActivityInstrumentationTestCase2<MainActivity>類有一個名為getActivity()的方法,它返回一個對MainActivity的引用。當MainActivity引用被傳入MainActivityTest的建構函式是,MainActivity中的檢視已經填充完畢。一旦有了這個引用,就可以呼叫mActivity.findViewById()來獲取檢視的引用了

11.1.2在MainActivity中定義回撥

 11.1.3定義儀器測試方法    P255

11.1.4執行儀器測試

11.1.5修改bug

11.2使用Monkey

        Monkey是Android SDK自帶的一款ing為Monkey的優秀工具,也成為UI/應用測試器Monkey。這款工具能夠針對App生成隨機的UI事件,就像一隻猴子在使用App一樣,在做App壓力測試時很有用

        文件位於developer.android.com/tools/help/monkey.html

         *另有一款MonkeyRunner的工具可以建立並執行Python指令碼來進行自動化應用測試,與Monkey無關

     eg:在執行後的終端輸入以下命令:adb shell monkey -p com.apress.gerber.currencies -v 2000

                 允許與正在執行裝置的額作業系統shell互動

                 -p開關告訴Monkey將隨機UI時間限定在com.apress.gerber.currencies包中

                 -v開關告訴Monkey儘可能詳細的彙報事件和異常

                2000是事件的數量

                *執行Monkey時,雖然已經將Monkey的UI事件限定為特定包,但你還是會面臨裝置預設設定被修改的風險。例如Monkey關閉了Wi-Fi或者修改了預設語言也並不罕見

11.3使用分析工具

與Android Studio捆綁的分析工具成為Lint。

      Lint會分析你的原始碼、XML檔案以及其他資源,查詢潛在的bug、未使用的資源、抵消佈局、硬編碼文字和其他Android相關的潛在問題。可以通過位於主選單欄中的Analyze選單來訪問Android Studio的分析工具

11.3.1檢查程式碼

        Analyze|Inspect Code

        *應該只把Lint和其他分析工具識別出的問題視作建議,不要試圖修改識別出的每一個問題,如果做了修改要確保沒有引入新的錯誤。

11.3.2分析依賴   Analyze|Analyze Dependencies

       分析以來操作將會檢查原始碼並自動識別所有的依賴。

       隨著Gradle的使用,大多數以來都可以自動下載,Gradle讓管理以來變得更加簡單便捷。

11.3.3分析棧軌跡

        logcat視窗中的內容非常詳細,以至於很容易讓人眼花繚亂,這就是要使用分析棧軌跡操作的原因。

        Analyze|Analyze Stacktrace

第12章 除錯

        將詳細探討偵錯程式並再次探索其他一些分析工具,他們不僅可以用於修改錯誤,還可以深入觀察工作中的潛在隱患

12.1日誌

      日誌是一種將變數值或程式狀態大一到系統控制檯的放啊,是的可以在程式執行過程中閱讀這些資訊。

      Android平臺上負責日誌訊息的框架成為logger。它獲取來自各種事件(並不限於你的應用)的輸出並將這些輸出儲存在一系列迴圈緩衝區中。

       迴圈緩衝區是一種列表類的資料結構,類似於連結串列,但除了以序列方式連線其元素之外,它還將首尾的元素相互連線。

       這些緩衝區包括radio——包含音訊和電話相關的訊息:event——包含系統時間訊息,例如服務建立和銷燬的通知;以及main——包含主日誌輸出。


12.1.1使用logcat

          可以在命令列中使用logcat,它與繫結裝置相互連線並將這些迴圈快取區中的內容中轉到開發控制檯

          使用語法 P266  過濾器控制元件

12.1.2寫入Android日誌

12.2捕捉Bug!

12.2.1使用互動式偵錯程式

**************************************************看書吧!

第13章 Gradle

          本章將探討Gradle並結合示例講解如何將其用於開發和維護Android App

          構建系統:構建系統通過提供完成這些任務的必要工具來滿足使用者的迫切需求。試想大量開發者如今面臨的迫切需要:支援最終產品的變體(除錯版、釋出版、付費版和免費版)、管理專案中包含的第三方軟體庫和元件,以及基於外部引數向整體過程新增條件。

          Gradle構建使用Groovy程式語言編寫,構建在Java核心執行時和API之上。Groovy大體採用Java的語法,同時融入了自己的語法,所以只需要做極少的修改就可以將大多數Java程式碼遷移到Groovy。可以高效地在Gradle構建指令碼中加入Java語法,以便實現想要的效果。Groovy還將閉包加入Java語法中。閉包是一個由花括號包圍的程式碼塊,可以將其賦值給變數或者傳遞給方法。閉包是Gradle構建系統的核心部分。

13.1 Gradle語法

*************************************************看書吧!

第十四章 更多SDK工具

14.1 裝置監視器   Android Device Monitor

14.1.1執行緒監視器   Update Threads

14.1.2堆監視器      Update Heap

14.1.3分配跟蹤器    Allocation Tracker

14.1.4網路統計 Network Statistics

14.1.5層次檢視器   Hierarchy View

14.2Android監視器

    Device Logcat

14.2.1記憶體監視器

Memory Monitor

14.2.2方法跟蹤工具    Method Trace

14.2.3分配跟蹤器

14.2.4螢幕抓取   Screen Capture    Screen Record

14.3導航編輯器  Navigation Editor

        這個編輯器允許你快速射擊App的高層工作流原型,同時在編輯模式中導航特定的Activiry和Fragment,如果有了App的大體思路並且想要預覽使用者在不同介面中的切換情況,它將是一個理想的工具

14.4終端

14.4.1查詢裝置

      adb device

14.4.2安裝APK

      adb install  /path/to/app.apk

14.4.3下載檔案

      adb pull

14.4.4上傳檔案

      adb push

14.4.5埠轉發

      adb forward local-port remote-port

14.5Google雲工具    (牆)

第十五章 Android可穿戴裝置實驗

第十六章 定製Android Studio