xamarin - xamarin应用程序启动缓慢

标签 xamarin xamarin.forms xamarin.android cross-platform app-startup

我们正在 PCL 上开发跨平台应用程序,但目前我们仅使用 Android 设备进行测试。
我们担心的是,启动应用程序大约需要 6 到 8 秒(取决于我们测试的设备),这非常慢。
设置几个断点后,我们发现时间消耗得相当均匀。
我们确实注意到这个特定部分花费了更长的时间:

  • 到达 MainActivity 上的 onCreate() 之前 1 秒(之前有一个闪屏,之前只有一张图像和背景颜色)
  • 1s on base.OnCreate(bundle);
  • 1s on global::Xamarin.Forms.Forms.Init(this, bundle);
  • 1.5 秒 Page mainPage = new LogScreen();(创建主页,然后将其设置为主导航页面)。

最佳答案

我建议的第一件事是不要对应用程序的调试版本进行基准测试,Mono 运行时和 Jit 代码的代码路径与发布版本不同,共享运行时的使用、程序集大小等等等都会影响启动和执行时间。

以下是使用内部基准测试程序(有条件编译,不注入(inject),并使用操作系统的系统)在高端和低端设备上“非常大”的基于 Android Forms 的应用程序的启动时间示例时钟)。

应用概述:

  • Xamarin.Forms v2.4.0.269-pre2
  • 混合编码和基于 XAML 的页面、控件等...
  • 已启用 XAML 编译器
  • “启动画面”已禁用
    • MainActivity 上基于主题的启动将添加:
      • 快速设备上的启动时间超过 200 毫秒,
      • 在闪存访问速度较慢的设备上需要 1-2 秒
    • 只是不要使用基于 Activity 的启动屏幕;-)
  • 多重 dex 处理
  • Proguard'd(通过带有自动反馈循环的 UI 测试大幅减少 jar)
  • 链接器(链接全部,通过 UI 测试和自动反馈生成自定义链接描述文件,大幅减少程序集大小)
  • 100% 源代码构建,以允许折叠命名空间和减少程序集
  • Viper 架构,无第三方 DI/IoC
  • 使用数据、资源广告网络优先级队列的延迟加载设计
  • 用于所有数据的 Realm 实时对象和查询(数据库最小大小:250MB,最大大小 1.2GB)

时间是通过 shell 脚本生成的,该脚本重新启动设备、监视启动以等待系统稳定、启动一系列应用程序(GApps、Facebook、Instagram、Twitter 等...)、等待系统进行结算,然后通过以下方式启动 Forms 应用程序:

export deviceTime=$(echo "$(adb -s $deviceID shell cat /proc/uptime | awk '{print $1}') * 1000" | bc -l)
adb -s $deviceID shell am start -n com.sushihangover.GeneticCancerDNAMapper/com.sushihangover.GeneticCancerDNAMapper.DevOpsDashboard --el startTime ${deviceTime%.*}

Google Pixel(基于 Oreo)设备(应用程序可在约 430 毫秒内使用):

I GeneticCancerDNAMapper: 0.162 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.OnCreate
I GeneticCancerDNAMapper: 0.164 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.base.SetTheme
I GeneticCancerDNAMapper: 0.201 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.base.OnCreate
I GeneticCancerDNAMapper: 0.244 : Xamarin.Forms.Forms.Init
I GeneticCancerDNAMapper: 0.266 : Realms.Realm.GetInstanceAsync ~Get Instance & Data~
I GeneticCancerDNAMapper: 0.324 : Realms.Realm.GetInstanceAsync ~Obtained Instance & Data~
I GeneticCancerDNAMapper: 0.324 : Xamarin.Forms.Application Content
I GeneticCancerDNAMapper: 0.349 : Xamarin.Forms.Application Content ~Creation Completed~
I GeneticCancerDNAMapper: 0.353 : Xamarin.Forms.Application.MainPage ~Displayed~
I GeneticCancerDNAMapper: 0.43 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.LoadApplication

低端“Android One”512MB 设备,带非常慢闪存(应用程序可在约 4.5 秒内使用):

回复:https://en.wikipedia.org/wiki/Android_One

I/GeneticCancerDNAMapper(10904): 2.453 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.OnCreate
I/GeneticCancerDNAMapper(10904): 2.467 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.base.SetTheme
I/GeneticCancerDNAMapper(10904): 2.731 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.base.OnCreate
I/GeneticCancerDNAMapper(10904): 3.016 : Xamarin.Forms.Forms.Init
I/GeneticCancerDNAMapper(10904): 3.166 : Realms.Realm.GetInstanceAsync ~Get Instance & Data~
I/GeneticCancerDNAMapper(10904): 3.571 : Realms.Realm.GetInstanceAsync ~Obtained Instance & Data~
I/GeneticCancerDNAMapper(10904): 3.571 : Xamarin.Forms.Application Content
I/GeneticCancerDNAMapper(10904): 3.772 : Xamarin.Forms.Application Content ~Creation Completed~
I/GeneticCancerDNAMapper(10904): 3.799 : Xamarin.Forms.Application.MainPage ~Displayed~
I/GeneticCancerDNAMapper(10904): 4.457 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.LoadApplication

关于xamarin - xamarin应用程序启动缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46163504/

相关文章:

c# - 谷歌地图未出现 - Xamarin

android - 如何在 Xamarin Android 中下载 2 个文件

xamarin - Xamarin 表单中运行时的相机和位置权限

xaml - 在没有 "The type ' 的 Xamarin.Forms XAML 中定义颜色颜色'不支持直接内容“

android - Xamarin - Navigation.PopModalAsync() 后重新加载页面

android - Monodroid ListView 获取所选项目类型转换错误

c# - 扫描 Wifi 网络不会返回 Xamarin 代码中的值

android - 如何在 Xamarin.Forms Webview 中使用自签名证书处理 SSL 错误?

architecture - 在 Monodroid 应用程序中重用 Monotouch 代码

android - 系统.Net.WebException : Error: NameResolutionFailure when Calling WCF Services throwing exception in mono android application