Xamarin Forms 4.8 Abp 6.4
Hi @Alper,
A lot of users are getting more and more exceptions on Xamarin Forms Android app like this : https://support.aspnetzero.com/QA/Questions/8484/Android-OnStart-crash The app is on the play store since a long time now and is working well most of the time. I never found the way to reproduce the exception reported by Google... but some days ago we had these exceptions with a new Nexus 5.
Therefore I hope you can help me to found a solution and fix the issue with the details above :
The exception happens in the following usecase :
- app is running normaly on foreground
- app is now in background
- after some time in background, the OS may kill the process (due to timeout or memory space needed)
- user comes back to the app
- app starts with the splash screen
- after splash screen is closed, the app crash
- user can reopen the app after the crack without any issue
- this exception is not happening when the app is killed manualy by the user
Here is the Android exception logged :
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: FATAL EXCEPTION: main
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: Process: com.MyApp.Mobile, PID: 11020
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: android.runtime.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at MyORG.MyApp.Core.Dependency.DependencyResolver.Resolve[T] () [0x00005] in <1174882f65d4478c861b92e9fc0bd083>:0
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at MyORG.MyApp.App.OnStart () [0x0010a] in <1174882f65d4478c861b92e9fc0bd083>:0
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in <1b39a03c32ec46258a7821e202e0269f>:0
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in <b868e022fd60450992c00cdaff974113>:0
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at Java.Lang.Thread+RunnableImplementor.Run () [0x00008] in <b868e022fd60450992c00cdaff974113>:0
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00008] in <b868e022fd60450992c00cdaff974113>:0
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.37(intptr,intptr)
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at mono.java.lang.RunnableImplementor.n_run(Native Method)
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30)
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:938)
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201)
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288)
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7842)
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
> 11-06 06:37:48.437 11020 11020 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
The exception seems to happen while calling :
await DependencyResolver.Resolve<INavigationService>().InitializeAsync();
Do you know why INavigationService could be null only on app restarts in that specific usecase ?
Could this be linked with the SplashActivity OnResume() when calling
ApplicationBootstrapper.InitializeIfNeeds<XamarinAndroidModule>()
.
5 Answer(s)
-
0
I tried to replace ApplicationBootstrapper.InitializeIfNeeds<XamarinAndroidModule>() by a new method called ApplicationBootstrapper.Initialize<XamarinAndroidModule>() which initialize application IOC container each time.
At first, it seems to be better but I had an app crash as follows :
11-07 17:49:32.384 31604 31604 E AndroidRuntime: android.runtime.JavaProxyThrowable: System.ArgumentException: Facility of type 'Castle.Facilities.Logging.LoggingFacility' has already been registered with the container. Only one facility of a given type can exist in the container. 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at Castle.MicroKernel.DefaultKernel.AddFacility (Castle.MicroKernel.IFacility facility) [0x0004e] in <e8e139fd05dd4c49be84efef707f01f4>:0 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at Castle.MicroKernel.DefaultKernel.AddFacility[T] (System.Action`1[T] onCreate) [0x00010] in <e8e139fd05dd4c49be84efef707f01f4>:0 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at Castle.Windsor.WindsorContainer.AddFacility[T] (System.Action`1[T] onCreate) [0x00000] in <e8e139fd05dd4c49be84efef707f01f4>:0 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at MyORG.MyApp.Core.ApplicationBootstrapper.Initialize[T] () [0x00038] in <3139bd716c9d44ebbfcb67ec47cb44cb>:0 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at MyORG.MyApp.Activities.SplashActivity.OnResume () [0x00017] in <e77a7bfb8b904473b3eb7dd998dd0ff6>:0 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in <1b39a03c32ec46258a7821e202e0269f>:0 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in <b868e022fd60450992c00cdaff974113>:0 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at Java.Lang.Thread+RunnableImplementor.Run () [0x00008] in <b868e022fd60450992c00cdaff974113>:0 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00008] in <b868e022fd60450992c00cdaff974113>:0 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.38(intptr,intptr) 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at mono.java.lang.RunnableImplementor.n_run(Native Method) 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30) 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:938) 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99) 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201) 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288) 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7842) 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 11-07 17:49:32.384 31604 31604 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
So it tells that I can't register a new Container...
Do you have any idea to help me find this bugg ?
-
0
Hi @ricavir
Can you reproduce this problem on development time ? Could you create an issue on GitHub so we can work on this for the next version ?
Thanks,
-
0
Hi @ismcagdas,
Thks for your feedback. I was not able to reproduce in development. I created an issue on github : https://github.com/aspnetzero/aspnet-zero-core/issues/4088
-
0
Thanks, I have added it to next milestone. We will work on this issue right after releasing .NEt 6 version of AspNet Zero.
-
0
Great @ismcagdas, we can close this ticket and follow the Github issue.