gpt4 book ai didi

java - Xamarin Android - 启动画面在恢复时不起作用

转载 作者:行者123 更新时间:2023-12-02 11:08:01 24 4
gpt4 key购买 nike

我按照这篇文章并将信息与其他文章拼凑起来创建了一个启动屏幕: https://learn.microsoft.com/en-us/xamarin/android/user-interface/splash-screen

当我通过点击应用程序的图标启动应用程序时,启动屏幕效果很好。但是,如果应用程序已经在运行并且我切换到它,则在应用程序恢复时屏幕会变白几秒钟。为什么?

这是我的代码:

    [Activity(Label = "Hardfolio", Icon = "@drawable/icon", Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class SplashActivity : FormsAppCompatActivity
{
static readonly string TAG = "Hardfolio: " + typeof(SplashActivity).Name;

public override void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState)
{
base.OnCreate(savedInstanceState, persistentState);
}

// Launches the startup task
protected override void OnResume()
{
base.OnResume();
var startupWork = new Task(AppStartup);
startupWork.Start();
}

// Simulates background work that happens behind the splash screen
async void AppStartup()
{
StartActivity(new Intent(Application.Context, typeof(MainActivity)));
}
}




[Activity(Label = "Hardfolio", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = false, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
[IntentFilter(new[] { UsbManager.ActionUsbDeviceAttached })]
[MetaData(UsbManager.ActionUsbDeviceAttached, Resource = "@xml/device_filter")]
public class MainActivity : Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
#region Fields
private AndroidHidDevice _TrezorHidDevice;
private UsbDeviceAttachedReceiver _UsbDeviceAttachedReceiver;
private UsbDeviceDetachedReceiver _UsbDeviceDetachedReceiver;
private object _ReceiverLock = new object();
#endregion

#region Overrides
protected override void OnCreate(Bundle bundle)
{
try
{
_TrezorHidDevice = new AndroidHidDevice(GetSystemService(UsbService) as UsbManager, ApplicationContext, 3000, 64, TrezorManager.TrezorVendorId, TrezorManager.TrezorProductId);

ServicePointManager.ServerCertificateValidationCallback += (o, certificate, chain, errors) => true;

TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;

base.OnCreate(bundle);

Xamarin.Forms.Forms.Init(this, bundle);

RegisterReceiver();

var application = new App(new CrossPlatformUtilities(new IsolatedStoragePersister(), new AndroidRESTClientFactory()), _TrezorHidDevice, GetPin);

LoadApplication(application);
}
catch (Exception ex)
{
Logger.Log("Android crash", ex, nameof(Wallet.Droid));
Toast.MakeText(ApplicationContext, ex.ToString(), ToastLength.Long).Show();
}
}

private async Task<string> GetPin()
{
var taskCompletionSource = new TaskCompletionSource<string>();

RunOnUiThread(async () =>
{
var pin = await TrezorPinPad.GetPin();
taskCompletionSource.SetResult(pin);
});

return await taskCompletionSource.Task;
}

protected override void OnResume()
{
base.OnResume();

Logger.Log($"Resuming... Setting up Trezor listeners. _TrezorHidDevice is {(_TrezorHidDevice == null ? "null" : "not null")}", null, nameof(Wallet.Droid));

RegisterReceiver();
}

private void RegisterReceiver()
{
try
{
lock (_ReceiverLock)
{
if (_UsbDeviceAttachedReceiver != null)
{
UnregisterReceiver(_UsbDeviceAttachedReceiver);
_UsbDeviceAttachedReceiver.Dispose();
}

_UsbDeviceAttachedReceiver = new UsbDeviceAttachedReceiver(_TrezorHidDevice);
RegisterReceiver(_UsbDeviceAttachedReceiver, new IntentFilter(UsbManager.ActionUsbDeviceAttached));

if (_UsbDeviceDetachedReceiver != null)
{
UnregisterReceiver(_UsbDeviceDetachedReceiver);
_UsbDeviceDetachedReceiver.Dispose();
}

_UsbDeviceDetachedReceiver = new UsbDeviceDetachedReceiver(_TrezorHidDevice);
RegisterReceiver(_UsbDeviceDetachedReceiver, new IntentFilter(UsbManager.ActionUsbDeviceDetached));
}
}
catch (Exception ex)
{
Logger.Log($"Error registering Hid receivers", ex, nameof(Wallet.Droid));
}
}
#endregion
}

最佳答案

如果您从另一个应用程序中启动您的应用程序/或使用 ClearTask 标志/或者您的应用程序正在执行冷启动(已在后台关闭),也许还有其他方式,您将看到“预览”屏幕,这是当前主题的背景(类似于您已经为 SplashScreen 所做的操作,它显示主题背景)...

但是,如果您的“@style/MainTheme”具有简单的白色背景,那么您在重新进入应用程序时可能会看到这样的内容。

因此可以考虑在OnCreate中使用“SetTheme”方法。此链接中有更多相关信息:

https://developer.android.com/topic/performance/vitals/launch-time

希望有帮助。

关于java - Xamarin Android - 启动画面在恢复时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50789501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com