偶尔我在我的Xamarin Android应用程序中遇到此异常:
Message: , ExceptionText: System.ArgumentException: Handle must be valid.
Parameter name: instance
at Java.Interop.JniEnvironment+InstanceMethods.CallObjectMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00017] in /Users/builder/data/lanes/4468/b16fb820/source/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:11271
at Android.Runtime.JNIEnv.CallObjectMethod (System.IntPtr jobject, System.IntPtr jmethod, Android.Runtime.JValue* parms) [0x00000] in /Users/builder/data/lanes/4468/b16fb820/source/monodroid/src/Mono.Android/JNIEnv.g.cs:102
at Android.Support.V4.Util.LruCache.Get (Java.Lang.Object key) [0x00051] in <6b598472177d41bdb28b48b89f407895>:0
at MyApp.ClientApp.Droid.Views.Adapters.CachingImagesAdapter`1[T].OnBindBasicViewHolder (Android.Support.V7.Widget.RecyclerView+ViewHolder holder, System.Int32 position) [0x00085] in C:\Projects\MyAppForClients.Droid\MyApp.ClientApp\Views\Adapters\CachingImagesAdapter.cs:247
在我的案例中抛出异常的对象是LruCache
的一个实例,它被声明为RecyclerView.Adapter
衍生物的私有成员。此适配器是Android.Support.V7.App.AppCompatDialogFragment
衍生产品的私有成员。并将片段添加到Android.Support.V4.App.FragmentPagerAdapter
。
我在LruCache.Get
中呼叫OnResume
,并且在第n次将应用置于后台并再次返回前台时会出现异常,触发OnResume
。
谷歌对这个问题没什么好说的。我发现了类似的问题here,但没有答案。我团队中的其他开发人员也表示,这个问题有时会发生在他们的Xamarin应用程序中,例如:
Java.Interop.JniEnvironment.InstanceMethods.CallObjectMethod(JniObjectReference instance, JniMethodInfo method)<c16d37a6da97402f84017e03c10d21d0>:0
Android.Runtime.JNIEnv.CallObjectMethod(IntPtr jobject, IntPtr jmethod)<d23d7850e6494c6fb18444fff8001568>:0
Android.Support.V4.App.Fragment.get_Resources()<6296d3d76c5d4378959a1d9bf7205023>
我能做些什么来阻止这种情况发生吗?