嗨,我的 android 应用程序有时会在启动时卡住。在 Xamarin 测试云上,失败似乎是;
SetUp:System.TimeoutException:超时等待...在 Xamarin.UITest.Shared.WaitForHelper.WaitFor(System.Func 1 predicate, System.String timeoutMessage, Nullable
1 超时,Nullable1 retryFrequency, Nullable
1 postTimeout) <0x7e4c998 + 0x004db> 在:0 在 Xamarin.UITest.Android.AndroidApp..ctor (IAndroidAppConfiguration appConfiguration) <0x7cacab8 + 0x0073b> 在:0 在 Xamarin.UITest.Configuration.AndroidAppConfigurator.StartApp (AppDataMode appDataMode) <0x7cac008 + 0x00063> 在:0 在 YH.MB.Test.AppInitializer.StartApp(平台平台)<0x7cab060 + 0x00027> 在:0 在 YH.MB.Test.Tests.BeforeEachTest () <0x7cab010 + 0x00013> 在:0 在 (包装器托管到本机) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) 在 System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System. Reflection.Binder 活页夹,System.Object[] 参数,System.Globalization.CultureInfo 文化)<0x3249110 + 0x00093> in :0
当我在三星 s3(在 xamarin 测试云上)上尝试它时,也有一个 StackTrace;
java.lang.NullPointerException: key == null
在 android.util.LruCache.get(LruCache.java: 113) 在 com.android.providers.settings.SettingsProvider$SettingsCache.isRedundantSetValue(SettingsProvider.java: 872) 在 com.android.providers.settings.SettingsProvider.insert(SettingsProvider .java: 574) 在 android.content.ContentProvider$Transport.insert(ContentProvider.java: 201) 在 android.content.ContentProviderNative.onTransact(ContentProviderNative.java: 148) 在 android.os.Binder.execTransact(Binder.java:第367章)
我不能在调试模式下重复这个问题。会是什么?
我的 Android OnCreate 方法是;
protected override void OnCreate(Bundle bundle)
{
// set the layout resources first
ToolbarResource = Resource.Layout.toolbar;
TabLayoutResource = Resource.Layout.tabs;
base.OnCreate(bundle);
Forms.Init(this, bundle);
#if ENABLE_TEST_CLOUD
Xamarin.Forms.Forms.ViewInitialized += (object sender, Xamarin.Forms.ViewInitializedEventArgs e) =>
{
if (!string.IsNullOrWhiteSpace(e.View.AutomationId))
{
e.NativeView.ContentDescription = e.View.AutomationId;
}
};
#endif
var container = new SimpleContainer();
container.Register<IDevice>(t => AndroidDevice.CurrentDevice);
container.Register<IDisplay>(t => t.Resolve<IDevice>().Display);
container.Register<IMediaPicker>(t => new MediaPicker());
container.Register<IFontManager>(t => new FontManager(t.Resolve<IDisplay>()));
container.Register<INetwork>(t => t.Resolve<IDevice>().Network);
container.Register<IJsonSerializer, MBJsonSerializer>();
container.Register<IPhoneService, PhoneService>();
container.Register<IUserDialogs>(t => UserDialogs.Instance);
if (!Resolver.IsSet)
Resolver.SetResolver(container.GetResolver());
UserDialogs.Init(this);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
我的 UITest 设置方法;
[TestFixture(Platform.Android)]
[TestFixture(Platform.iOS)]
public class Tests
{
IApp app;
Platform platform;
public Tests(Platform platform)
{
this.platform = platform;
}
[SetUp]
public void BeforeEachTest()
{
app = AppInitializer.StartApp(platform);
}
}
提前致谢。