【Xamarin.Forms 2】App基礎知識與App啟動
阿新 • • 發佈:2020-06-30
## 系列目錄
1、[【Xamarin.Forms 1】App的建立與執行](https://www.cnblogs.com/sesametech-netcore/p/13211541.html)
## 引言
本篇文章將介紹`Xamarin.Forms`中 `App` 基礎知識和 `App`的啟動。
## 開發環境
1. Visual Studio 2019 16.6.2
2. Xamarin.Forms 4.6.0.726
3. Android 5.0 (API 級別21 - Lollipop)以上
# 本文主要內容
## 一、專案總的結構組成
在我們建立了`HelloXamarinApp`專案時,IDE會預設建立3個專案:`HelloXamarinApp`、`HelloXamarinApp.Android`與`HelloXamarinApp.iOS`。
* `HelloXamarinApp` 為功能的專案,主要包括介面的佈局、資訊等公共的內容。
* `HelloXamarinApp.Android` Android專案的入口,用來生成`Apk`檔案的專案工程。
* `HelloXamarinApp.iOS` iOS專案的入口,用來生成iOS App檔案的專案工程。
![](https://img2020.cnblogs.com/blog/1746998/202006/1746998-20200630181041421-104532397.png)
## 二、Android專案的目錄結構
* `AndroidManifest.xml`:Android清單,用於描述功能和需求
* `Resource`:Android資原始檔夾,用於存放圖片,佈局,樣式,顏色,等等內容;
* `MainActivity.cs`:主活動介面,Xamarin.Forms公共庫中寫的頁面等都在這個介面上顯示;
![](https://img2020.cnblogs.com/blog/1746998/202006/1746998-20200630183619568-1489910893.png)
## 三、`AndroidManifest.xml`
* `AndroidManifest.xml`功能非常強大,用於描述App的功能和需求,如支援的sdk最低版本,目標版本、App安裝後顯示的名稱、App使用的相關手機許可權等。
* 在IDE中,可以通過在`Android`專案屬性中的`Android`清單選項中可以圖形化進行維護。
* 一般情況我們只需瞭解`Android`清單選項中的內容即可。
![](https://img2020.cnblogs.com/blog/1746998/202006/1746998-20200630184211194-146596717.png)
選擇`Android`專案,`右鍵`->`屬性`:可以看到清單內容
![](https://img2020.cnblogs.com/blog/1746998/202006/1746998-20200630184707181-274918800.png)
## 四、`Resource`
**1、`drawable`和`mipmap`**
* `drawable`:推薦用於存放圖片、xml等資原始檔;
* `mipmap`:推薦存放App圖示檔案,
* `mdpi` `hdpi` `xhdpi` `xxhdpi` `xxxhdpi`:分別存放不同解析度的圖片,Android系統會根據手機解析度去選擇不同解析度資料夾下的圖片。
- `mdpi`:HVGA(320*480)
- `hdpi`:WVGA(480*800),FWVGA(480*854)
- `xhdpi`:720P(1280*720)
- `xxhdpi`:1080P(1920*1080)
- `xxxhdpi`:4K(3840-2160)
**2、layout**
用於描述使用者介面佈局,在`Android`原生開發中,所有的介面都是放在這裡的。
**3、values**
* `values`包含用於儲存簡單值的xml檔案,如:
- `style.xml`:存放樣式列表,`App`中的樣式都可以放在此檔案中。確保`App`的全域性樣式保持一致
- `colors.xml`:存放顏色列表,`App`各種顏色,包括專案的主題顏色等,都可以在此檔案中進行定義
- `strings.xml`:存放字串列表(預設是未建立此檔案),需要時可以自行新增
## 五、`MainActivity.cs`
專案啟動時一些初始化工作都可以在此檔案中。
![](https://img2020.cnblogs.com/blog/1746998/202006/1746998-20200630190231368-541817080.png)
1. MainActivity繼承自FormsAppCompatActivity,它是XF在Android平臺下提供的基類,封裝了框架初始化等方法;
2. 通過base.OnCreate、Forms.Init、LoadApplication三個步驟,將XF框架初始化,並載入App類;
3. App類主要有以下功能:
- MainPage:指定App啟動頁面;
- Properties:跨生命週期的屬性字典;
- Current:一個代表當前應用的靜態屬性。
## 六、`iOS`專案
`iOS`專案的入口檔案在`Main.cs`中,並在此檔案中的`Main`函式中呼叫`AppDelegate`類。
在`AppDelegate`類中的函式`FinishedLaunching`中會進行一些初始化並啟動App。
![](https://img2020.cnblogs.com/blog/1746998/202006/1746998-20200630190507450-2071826325.png)
## 七、`HelloXamarinApp`
如果你使用wpf開發過專案,一定會很熟悉這種專案結構目錄。
![](https://img2020.cnblogs.com/blog/1746998/202006/1746998-20200630191613064-1512915698.png)
看一下`App.xaml.cs`檔案的內容:
![](https://img2020.cnblogs.com/blog/1746998/202006/1746998-20200630191830194-1539715320.png)
【說明:】
1. MainPage用於指定啟動介面,這裡指定的是MainPage.xaml介面;
2. Properties屬性字典用於儲存資料,可以在程式中任意位置賦值,任意位置取值;
3. Current代表當前App,它是一個靜態變數,可以在程式任意位置呼叫;
4. 在程式其他位置獲取當前App的方式:Application.Current。
#### 生命週期
App的生命週期在這裡看的很清楚:
OnStart:App啟動時呼叫;
OnSleep:App轉到後臺時呼叫;
OnResume:App從後臺恢復時呼叫。
> 參考文章:
> 1、[https://www.jianshu.com/p/306a6616fdd5](https://www.jianshu.com/p/306a6616fdd5)
> 2、[https://www.jianshu.com/p/85e3f0a41e57](https://www.jianshu.com/p/85e3f