目录
一、前言
二、补充下基础知识
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. 不同的平台,对于网络服务功能处理方式不一样,所以需要单独处理;