こんにちは、私の 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> in :0 at Xamarin.UITest.Android.AndroidApp..ctor (IAndroidAppConfiguration appConfiguration) <0x7cacab8 + 0x0073b> in :0 at Xamarin.UITest.Configuration.AndroidAppConfigurator.StartApp (AppDataMode appDataMode) <0x7cac008 + 0x00063> in :0 at YH.MB.Test.AppInitializer.StartApp (プラットフォーム プラットフォーム) <0x7cab060 + 0x00027> in :0 at YH.MB.Test.Tests.BeforeEachTest () <0x7cab010 + 0x00013> in :0 at (ラッパー管理からネイティブへ) 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
Samsung s3 (xamarin テスト クラウド上) で試したところ、StackTrace もありました。
java.lang.NullPointerException: キー == 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) dalvik.system.NativeStart.run で (ネイティブ メソッド: )
デバッグ モードでその問題を繰り返すことはできません。それは何でしょうか?
私の 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);
}
}
前もって感謝します。