首页 > 解决方案 > Xamarin Android 应用程序在启动画面中挂起

问题描述

我们正在使用ReactiveUI开发Xamarin Android应用程序。以下是技术规格,

我的项目属性发布配置如下。

我使用华为 API 19(INSTRUCTION SET - armeabi-v8a) 测试了整个开发。调试和发布配置一切正常。我使用 Theme.appCompat 中的自定义主题作为应用程序主题。我在 values 和 values-v21 文件夹中有styles.xml。两者同名。我在 Splashing 屏幕中使用了一个ProcessDialog,它被确定为已弃用。问题出在哪里?我是 Xamarin Android 的新手。提前致谢。

更新:以下是我的MainActivity.cs的样子。

using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Graphics.Drawables;
using Android.OS;
using Android.Support.Design.Widget;
using Android.Support.V4.View;
using Android.Support.V4.Widget;
using Android.Support.V7.App;
using Android.Util;
using Android.Views;
using Android.Widget;
using DistributrIII.Mobile.Droid.Activities.Errors;
using DistributrIII.Mobile.Droid.Activities.Login;
using DistributrIII.Mobile.Droid.Activities.PointOfSale;
using DistributrIII.Mobile.Droid.Fragments.CloseOfTheDay;
using DistributrIII.Mobile.Droid.Fragments.Common;
using DistributrIII.Mobile.Droid.Fragments.Lossess;
using DistributrIII.Mobile.Droid.Fragments.Orders;
using DistributrIII.Mobile.Droid.Fragments.Outlets;
using DistributrIII.Mobile.Droid.Fragments.PointOfSale;
using DistributrIII.Mobile.Droid.Fragments.Reports;
using DistributrIII.Mobile.Droid.Fragments.SaleOrder;
using DistributrIII.Mobile.Droid.Fragments.PurchaseOrder;
using DistributrIII.Mobile.Droid.Fragments.Settings;
using DistributrIII.Mobile.Droid.Util;
using DistributrIII.Mobile.Lib.Model.Common;
using DistributrIII.Mobile.Lib.Model.Login;
using DistributrIII.Mobile.Lib.Model.Sync;
using DistributrIII.Mobile.Lib.VM.MainActivity;
using DistributrIII.Mobile.Lib.VM.Util;
using Java.Interop;
using Java.IO;
using ReactiveUI;
using System;
using System.Reactive.Concurrency;
using System.Reactive.Linq;
using System.Threading;
using System.Threading.Tasks;
using static Android.Support.V7.App.ActionBar;
using static Android.Support.V7.Widget.SearchView;
using Environment = Android.OS.Environment;
using SearchView = Android.Support.V7.Widget.SearchView;
using DistributrIII.Mobile.Droid.Fragments.OpenTransactions;

namespace DistributrIII.Mobile.Droid
{
    [Activity(Label = "DistributrIII", MainLauncher = false, Theme = "@style/MainTheme")]
    public class MainActivity : DistributrBaseActivity<MainActivityVM>
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);            
            SetContentView(Resource.Layout.activity_main);
            SetupUI(savedInstanceState);
        }

        #region UI Components
        DrawerLayout drawerLayout;
        NavigationView navigationView;
        IMenuItem previousItem;
        Android.Support.V7.Widget.Toolbar toolbar;
        DisplayScreen PreviousMenuItemId = DisplayScreen.None;
        SearchView searchControl;
        ProgressDialog progress;
        #endregion

        #region UI Helper Methods

        public override bool OnCreateOptionsMenu(IMenu menu)
        {
            return base.OnPrepareOptionsMenu(menu);
        }


    private void SetupUI(Bundle savedInstanceState) {

        toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
        toolbar.InflateMenu(Resource.Menu.main_menu);

        searchControl = (SearchView)toolbar.Menu.FindItem(Resource.Id.distributr_search).ActionView ;

        var textChangedObservable =
            Observable
                .FromEventPattern<QueryTextChangeEventArgs>(
                    x => searchControl.QueryTextChange += x,
                    x => searchControl.QueryTextChange -= x)
                .Select(x => x.EventArgs.NewText)
                .Throttle(TimeSpan.FromSeconds(1), TaskPoolScheduler.Default);


        var querySubmitObservable =
            Observable
                .FromEventPattern<QueryTextSubmitEventArgs>(
                    x => searchControl.QueryTextSubmit += x,
                    x => searchControl.QueryTextSubmit -= x)
                .Select(x => x.EventArgs.Query);

        SubscriptionDisposables.Add(
            Observable
                .Merge(textChangedObservable, querySubmitObservable)
                .Subscribe(async searchText =>  this.HandleSearch(searchText))

        );

        SetupNavigation(savedInstanceState);
        BottomNavigationView navigationView = (BottomNavigationView)FindViewById(Resource.Id.bottom_navigation);

        if (DIIIStaticStorage.LoginAccountType == LoginAccountType.Customer)
        {
            navigationView.InflateMenu(Resource.Menu.nav_bottom_customr);
        }
        else
        {
            navigationView.InflateMenu(Resource.Menu.nav_bottom);
        }

        navigationView.NavigationItemSelected += BottomNavigation_NavigationItemSelected;
        Android.Support.Design.Internal.BottomNavigationMenuView menuView = (Android.Support.Design.Internal.BottomNavigationMenuView)navigationView.GetChildAt(0);
        for (int i = 0; i < menuView.ChildCount; i++)
        {
            Android.Support.Design.Internal.BottomNavigationItemView itemView = (Android.Support.Design.Internal.BottomNavigationItemView)menuView.GetChildAt(i);
            itemView.SetShiftingMode(false);
            itemView.SetChecked(false);
        }

        //InvalidateOptionsMenu();
        toolbar.Title = "Distributr";
    }
}

我观察到这在某些设备上也陷入了调试模式。日志有人可以告诉我错误是什么。再次感谢

标签: xamarin.androidreleaseandroid-appcompatandroid-8.0-oreoreactiveui

解决方案


推荐阅读