【Delphi】FMX开发 ios 和 android 异同点(踩坑记)

2023-12-13 05:47:23

目录

一、前言

二、补充下基础知识

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程序相似,都有程序事件,移动端也不例外,这些事件包括(官方帮助):

ItemDescriptionPlatform
AndroidiOS

1. BecameActive

Your application has gained the focus.

Supported

Supported

2. EnteredBackground

The user is no longer using your application, but your application is still running in the background.

Supported

Supported

3. FinishedLaunching

Your application has been launched.

Supported

Supported

4. LowMemory

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

5. WillBecomeForeground

The user is now using your application, which was previously in the background.

Supported

Supported

6.WillBecomeInactive

Your application is going to loose the focus.

Supported

Supported

7.WillTerminate

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. 不同的平台,对于网络服务功能处理方式不一样,所以需要单独处理;

文章来源:https://blog.csdn.net/sensor_WU/article/details/134284696
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。