# Android 基礎技術 ###### tags: `Tag(個人)` [TOC] ## Android 四大元件 ### [Activity](https://developer.android.com/reference/android/app/Activity?hl=zh-tw) Activity 代表顯示使用者介面的一個畫面 #### 生命週期 > onCreate() > onStart() > onResume() > onPause() > onStop() > onRestart() > onDestroy() ### [service服務](https://developer.android.com/reference/android/app/Service?hl=zh-tw#WhatIsAService) 服務 ==是在背景執行的元件,用於進行長期作業或遠端處理程序工作。 服務並不會提供使用者介面==。 例如:服務可在使用者位於其他應用程式時在背景撥放音樂,或是透過網路擷取資料,同時允許使用者與 Activity 進行互動。 其他元件 (例如 Activity) 可啟動並讓服務執行,或是繫結至 Activity 以便與其進行互動。 ### [內容供應程式](https://developer.android.com/reference/android/content/ContentProvider?hl=zh-tw) 內容供應程式 可管理一組已分享的應用程式資料。您可以將資料儲存在檔案系統、SQLite 資料庫、網路上,或是您應用程式可存取的任何其他永久儲存空間。 ### [廣播接收器](https://developer.android.com/reference/android/content/BroadcastReceiver?hl=zh-tw) 廣播接收是一種元件,可回應整個系統的廣播通知。大多由系統所發出。例如:系統會發出廣播來通知使用者螢幕已關閉。 此外,==應用程式也可發出廣播,例如說發出廣播來通知其他應用程式特定資料已下載到裝置,可供它們使用。 雖然廣播接收器無法顯示使用者介面,但它們可建立狀態列通知==。 具體而言,廣播接收器只是其他元件的「閘道」,用於執行極少量的工作。 例如,廣播接收器可啟動服務依據事件執行特定工作。 --- ## 物件導向 ### 什麼是類別( Class )? 類別定義物件的屬性、方法,利用類別可以產生物件。 ### 什麼是物件(Object)? 物件有它所屬的屬性及方法,在記憶體佔有空間,物件導向的概念就是把真實世界抽象化為許多的物件,物件之間彼此會交互運作。 ### 三大特性 封裝 (Encapsulation) 繼承 (Inheritance) 多型 (Polymorphism) --- ## 基本資料型別、參考型別 ### 基本資料型態 Primitive type Java預先定義好的資料型態有這八種: char, byte, short, int, long, float, double, boolean ### 參考資料型態 Reference type 基本型別以外的都是參考型別 ![](https://i.imgur.com/Fo8qgFg.png) --- ## Android 五大布局 > LinearLayout 線性佈局 > TableLayout 表格佈局 > FrameLayout 幀佈局 > RelativeLayout 相對佈局 > GridLayout 網格佈局 --- ## Android 五大儲存方式 > SharedPreferences > SQList > 外部儲存 > 內部儲存 > 網路儲存方式 --- ## [權限處理](https://hackmd.io/H0p0Dh0lSaq1fkIOBFrXsg?view) Signature 簽章權限 Normal 一般權限 Dangerous 危險權限 --- ## 基本MVC架構 [https://zh.wikipedia.org/wiki/MVC](https://zh.wikipedia.org/wiki/MVC) 程式劃分為三種組件,模型 - 視圖 - 控制器(MVC)設計定義它們之間的相互作用 模型(Model) 用於封裝與應用程式的業務邏輯相關的資料以及對資料的處理方法。 視圖(View)能夠實現資料有目的的顯示。 控制器(Controller)起到不同層面間的組織作用,用於控制應用程式的流程。它處理事件並作出回應。「事件」包括用戶的行為和資料 Model 上的改變。 ## 多執行緒 程序是程式(任務)的執行過程,它持有資源(共享記憶體,共享檔案)和執行緒。 詳細說明參考: [https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/75324/](https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/75324/) --- ## webViev與Javascript交互方式 app和網頁做串接 --- ## Service端串API --- ## 例外處理 設計過程中一定要將處理例外情形的程式碼預先撰寫設計好,當執行過程中真的產生例外時,會按照事先設計的程式碼來處理例外,程式也能正常的繼續執行。 詳細說明參考網址: [https://litotom.com/2017/12/27/java-exception-handling/](https://litotom.com/2017/12/27/java-exception-handling/) --- ## 資料結構 1. ArrayList 2. List 3. HashMap 更多詳細說明參考網址: [https://codertw.com/ios/59945/](https://codertw.com/ios/59945/) --- ## 程式碼混淆 > ProGuard > R8 --- ## 何謂回收機制 GC(Garbage Collection)系統回收機制 1. 發生原因: * 當 Activity 暫停或停止時,會保留 Activity 的狀態。 原因在於當==Activity 物件暫停或停止時,它仍然保留在記憶體中==,關於它的成員和目前狀態的所有資訊,仍然為有效的。 因此,使用者在 Activity 內所做的任何變更,都會保留下來。 * 當 Activity 返回前景 (當它「繼續」時),那些變更仍然會在原地。不過,==當系統終止 Activity 以收回記憶體時,Activity 物件會遭到終止,所以系統就無法將它及其狀態完好無缺地繼續。== 如果使用者瀏覽回 Activity 物件,系統必須加以重新建立。 但是,使用者不會注意到系統已終止該 Activity 並加以重新建立,可能因此期待 Activity 就跟之前的狀態一樣。 * 如果是這樣,您可以==實作額外的回呼方法,以確認 Activity 狀態相關的重要資訊會保留下來==。此回呼方法讓您儲存關於 Activity 狀態的資訊:==onSaveInstanceState()==。 --- ## 套件運用 第三方相關套件