n.l*_*ell 8 cross-platform app-startup xamarin.android xamarin xamarin.forms
我们正在 PCL 上开发跨平台应用程序,但目前我们仅使用 android 设备进行测试。
我们担心的是,启动应用程序需要大约 6 到 8 秒(取决于我们测试的设备),这非常慢。
放置几个断点后,我们看到时间消耗相当均匀。
我们确实注意到这个特定部分花费了更长的时间:
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
Page mainPage = new LogScreen();
(创建主页面,然后将其设置为主导航页面)。我建议的第一件事是不要对应用程序的调试版本进行基准测试,Mono 运行时和 Jit'd 代码的代码路径与发布版本不同,共享运行时的使用、程序集大小等,等等,等都会影响启动和执行时间。
以下是在高端和低端设备上使用内部基准测试程序(有条件地编译,未注入,并使用操作系统的系统时钟)的“非常大”的基于 Android Forms 的应用程序的启动时间示例。
MainActivity
将添加:
时间是通过一个 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%.*}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
回复: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
Run Code Online (Sandbox Code Playgroud)
我将把我们为此找到的所有解决方案放在一起,以便将其全部集中在一处。
其中一个答案链接了这篇文章,这非常有用。
除此之外,我们还做了以下几件事:
global::Xamarin.Forms.Forms.SetFlags("FastRenderers_Experimental");
在MainActivity.OnCreate()
方法上添加这一行来完成的global::Xamarin.Forms.Forms.Init(this, bundle);
这是使用 Xamarin.Forms 时的一个常见问题,有很多与此相关的线程,特别是这个:
https://forums.xamarin.com/discussion/93178/lets-talk-performance/p6
好消息是 Xamarin 团队正在为此努力。
以下是您可以改进的一些提示:
https://blog.xamarin.com/5-ways-boost-xamarin-forms-app-startup-time/
归档时间: |
|
查看次数: |
9436 次 |
最近记录: |