---
# System prepended metadata

title: Android 基礎技術
tags: [Tag(個人)]

---



# 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()==。

---

## 套件運用

第三方相關套件




