4

如何在使用 Xamarin.Android 方法以 C# 编写的 android 应用程序上提高启动性能/缩短启动时间(点击应用程序和出现介绍屏幕之间的时间)。

由于我的设备不是最旧的(摩托罗拉 Moto G3),我想知道为什么一些大型商业应用程序/游戏(例如 Clash of Clans 和 Facebook)的“黑屏”时间如此之少,而我的一点点简单俗气的 Android 应用程序甚至无法加载来自本地存储的数据(只是从硬编码值创建数据模型)需要很长时间才能显示介绍屏幕。

即使创建一个完整的新应用程序并通过 adb 在我的手机上启动它也会有一些延迟提前谢谢

4

1 回答 1

1

Debug我首先会让您检查配置与签名Release配置在“启动性能”方面的实际差异。

https://developer.xamarin.com/guides/android/advanced_topics/application_package_sizes/#Release_Packages

可悲的是,Debug配置有一些项目需要到位才能进行调试。这也称为Shared Runtimeand Shared Platform。第一次运行时要复制大约 10MB。

https://developer.xamarin.com/guides/android/advanced_topics/application_package_sizes/#Debug_Packages

复制这些核心组件只需完成一次,因为它需要相当多的时间,但允许任何后续运行在调试模式下的应用程序使用它们。最后,我们复制实际应用,小而快:

所以这可能是一个因素。但是,让我们在这里讨论一些其他选项:

您还可以使用Fast Assembly Deploymentwhich 将仅在设备上直接安装程序集一次,然后它将复制自上次部署以来已修改的文件。

https://developer.xamarin.com/guides/android/advanced_topics/application_package_sizes/#Fast_Assembly_Deployment

注意:默认情况下,这两个设置通过以下 MSBuild 属性“开启”<AndroidUseSharedRuntime>true</AndroidUseSharedRuntime><EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>

接下来您可以使用AOT(注意:在撰写本文时是实验性的)

AOT 编译选项(在“打包属性”页面上)启用程序集的提前 (AOT) 编译。启用此选项后,通过在运行前预编译程序集可以最大限度地减少即时 (JIT) 启动开销。生成的本机代码与未编译的程序集一起包含在 APK 中。这会缩短应用程序的启动时间,但代价是 APK 大小会稍大一些。

AOT 编译选项需要企业许可证或更高版本。AOT 编译仅在项目配置为 Release 模式时可用,默认禁用。有关 AOT 编译的更多信息,请参阅 AOT。

https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/publishing_an_application/part_1_-_preparing_an_application_for_release/#AOT_Compilation

最后,您可以启用LLVM Optimization Compiler(注意:在撰写本文时是实验性的)

当启用 AOT 编译选项时(在 Packaging Properties 页面上),您可以选择启用 LLVM Optimizing Compiler 以将 AOT 编译的程序集转换为本机代码。LLVM 编译器创建更小更快的编译代码,但以更慢的构建时间为代价。默认情况下禁用 LLVM 编译器。

请注意,LLVM 优化编译器选项需要商业许可证或更高版本,并且仅在启用 AOT 编译时可用。

https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/publishing_an_application/part_1_-_preparing_an_application_for_release/#LLVM_Optimizing_Compiler

AOT使用和时请记住这一点LLVM

注意:AOT 目前是一项实验性功能。不建议用于生产用途。AOT 和 LLVM 在 Xamarin.Android 5.1 中可用,但在更高版本的 Xamarin.Android 中不再可用。有关详细信息,请参阅发行说明

其他可能相关的项目,但我不会根据您的“文件->新项目”假设进行详细介绍:

  • 在应用程序退出之前做太多工作OnCreate()
  • .apk尽可能多地缩小你的加载时间
于 2016-11-08T17:18:40.267 回答