目錄
一、前言
二、補充下基礎知識
1. APP程序事件:TApplicationEvent
2. APP內置Web服務器或者UDP服務端或者TCP服務端
三、iOS 和 android 平臺的不同點
1. TApplicationEvent的不同點:以下不同點,請仔細閱讀!
2. APP內置服務器不同點
四、總結
一、前言
????????Delphi中FMX開發 ios 和 android 程序很方便,一套代碼可以兼容不同平臺。但凡事也不是絕對的,不同的平臺有各自的特點,開發起來還是有很多不同的地方需要去分別適配。最近在學習FMX開發時,遇到了一些這樣的問題,也算是踩坑吧,今天把這些記錄下來,以便后來者有個參考。
? ? ? ? 事實上,如果詳細閱讀官方的文檔,也會少走很多彎路,無奈我們總是慣性,按照VCL來理解,或者自認為自己理解了,實際上是沒有理解,所以就會走些彎路。真正 ios 和 android 平臺是有很多不同點的,本文也只是把我遇到的問題記錄下來,如果你也有遇到的不同問題,請留言!
二、補充下基礎知識
????????在介紹具體遇到的不同點前,先補充明確下一些基礎的知識。
1. APP程序事件:TApplicationEvent
????????FMX程序和VCL程序相似,都有程序事件,移動端也不例外,這些事件包括(官方幫助):
Item | Description | Platform | |
---|---|---|---|
Android | iOS | ||
| Your application has gained the focus. | Supported | Supported |
| The user is no longer using your application, but your application is still running in the background. | Supported | Supported |
| Your application has been launched. | Supported | Supported |
| This warns your application that the device is running out of memory. Your application should reduce memory usage, freeing structures and data that can be loaded again at a later point. | Supported | Supported |
| The user is now using your application, which was previously in the background. | Supported | Supported |
| Your application is going to loose the focus. | Supported | Supported |
| The user is quitting your application. | Supported | Supported |
以上程序事件,后面有解釋,一看就明白。
2. APP內置Web服務器或者UDP服務端或者TCP服務端
????????我們開發APP,可能需要在程序內部構建Web服務器,或則和TCP服務端,以便監聽接收通過電腦或者其他設備發送的請求。
? ? ? ? 比如我們可能會在程序中使用 TIdHTTPServer 創建一個Web服務器,提供本機Web瀏覽內容。當然我們也可能建立一個UDP監聽服務器,以便能夠接收到其他設備的UDP廣播信息。
三、iOS 和 android 平臺的不同點
1. TApplicationEvent的不同點:以下不同點,請仔細閱讀!
在android系統中,程序調用系統的分享功能,將會觸發程序的 WillBecomeInactive
事件。??
在 ios 系統中,程序調用系統的分享功能,將不會觸發程序的 WillBecomeInactive
事件。
在android系統中,程序提示用戶申請權限,將不會觸發程序的 WillBecomeInactive
事件。
在ios系統中,程序提示用戶申請權限,將會觸發程序的 WillBecomeInactive
事件
2. APP內置服務器不同點
假定一款APP,內置有Web服務器功能,程序啟動后是能正常訪問,正常提供服務的,那么對于如下事件,Web服務器的表現將會在 ios 和 android 上有不同。
平臺 | 說明 |
android | 1. 程序進入InActive狀態后,Web服務正常; 2. 程序進入Background后,大概5秒鐘后,Web服務停止 3. 程序重新Active后(注意不是重啟,是從后臺調入到前臺),Web服務正常 以上符合我們設計程序的初衷,應該這樣就可以的。 |
ios | 1. 程序進入InActive狀態后,Web服務停止; 2. 程序進入Background后,Web服務立即停止 3. 程序重新Active后(注意不是重啟,是從后臺調入到前臺),Web服務仍然停止 以上似乎不符合我們設計程序的初衷,這樣就要求我們在程序的Active以及BackGround等事件中要進行處理,否則進入后臺再起來后Web服務就不能用了。 |
四、總結
1. 因為ios和android對于調出系統功能界面導致觸發InActive事件不同,所以一定要分別處理;
2. 不同的平臺,對于網絡服務功能處理方式不一樣,所以需要單獨處理;