Xamarin Android应用程序恢复时会崩溃



显然,我们的Xamarin本机应用程序有时在Android上崩溃了一段时间,但我无法再现它。

看来,当我们的选项卡式应用程序中的一个碎片夸大时,崩溃是造成的。知道这会是什么?报告仅适用于Android 7,尽管该应用程序的用户很少,因此可能是一个巧合。该应用程序针对Android 7.0,但以前在App将目标框架设置为Android 6.0时,错误是相同的(有几行不同)。谷歌搜索很少。

更新11/17/2017:我尝试捕获异常(尝试围绕您看到的2行代码buildingListFragment)并扔掉我自己的例外,但是没有被抓住,并且在Google Play中出现了相同的例外控制台崩溃报告。这对我来说仍然是一个问题,将不胜感激。

android.runtime.JavaProxyThrowable: at AlarmKeeper.Droid.BuildingListFragment.OnCreateView (Android.Views.LayoutInflater inflater, Android.Views.ViewGroup container, Android.OS.Bundle savedInstanceState) [0x00028] in <8584c8930bb24ecaa4ab45fc24b599b6>:0
at Android.Support.V4.App.Fragment.n_OnCreateView_Landroid_view_LayoutInflater_Landroid_view_ViewGroup_Landroid_os_Bundle_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_inflater, System.IntPtr native_container, System.IntPtr native_savedInstanceState) [0x00020] in <1e89c43d3c7d48b5ba69bfc0b1bdf114>:0
at (wrapper dynamic-method) System.Object:fc5b2ba7-0fe0-4b23-b87c-c512566cc5f6 (intptr,intptr,intptr,intptr,intptr)
at md5446876e046c50288069676734a083198.BuildingListFragment.n_onCreateView (Native Method)
at md5446876e046c50288069676734a083198.BuildingListFragment.onCreateView (BuildingListFragment.java:30)
at android.support.v4.app.Fragment.performCreateView (Fragment.java:2248)
at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1340)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.java:1569)
at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1636)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated (FragmentManager.java:2977)
at android.support.v4.app.FragmentController.dispatchActivityCreated (FragmentController.java:192)
at android.support.v4.app.FragmentActivity.onStart (FragmentActivity.java:603)
at android.support.v7.app.AppCompatActivity.onStart (AppCompatActivity.java:178)
at android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1256)
at android.app.Activity.performStart (Activity.java:6972)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2937)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3045)
at android.app.ActivityThread.-wrap14 (ActivityThread.java)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1642)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:154)
at android.app.ActivityThread.main (ActivityThread.java:6776)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1410)

碎片类:

public class BuildingListFragment : Fragment
{
    ...
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        base.OnCreateView(inflater, container, savedInstanceState);
        var view = inflater.Inflate(Resource.Layout.BuildingListFragment, container, false);
        ...
    }
...
}

适配器:

public class TabAdapter : FragmentPagerAdapter, IconPagerAdapter
{
    private MainActivity _context;
    public TabAdapter (MainActivity context, FragmentManager p0) : base(p0)
    {
        _context = context;
    }
    public override Fragment GetItem(int position)
    {
        switch (position) {
        case 0:
            return new BuildingListFragment ();
        case 1:
            return AlarmListFragment.NewInstance("active");
        case 2:
            return AlarmListFragment.NewInstance("confirmed");
        case 3:
            return new ProfileFragment();
        }
        return null;
    }
    public override int Count
    {
        get{ return 4; }
    }
    ...
}

主动脉:

    private TabAdapter _adapter;
    private ViewPager _viewPager;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        ...
            _viewPager = FindViewById<ViewPager>(Resource.Id.main_view_pager);
            _adapter = new TabAdapter(this, SupportFragmentManager);
            _viewPager.Adapter = _adapter;
            _viewPager.AddOnPageChangeListener(this);
            _tabLayout = FindViewById<TabLayout>(Resource.Id.main_tab_layout);
            TabLayoutHelper.SetupWithViewPager(_tabLayout, _viewPager);
            var activeItem = Intent.GetIntExtra(ArgActiveFragment, 0);
            if (activeItem != 0)
            {
                _viewPager.SetCurrentItem(activeItem, false);
            }

buildingListFragment.AXML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:background="@color/background">
    <LinearLayout
        android:id="@+id/error_container"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:background="@color/red"
        android:gravity="center"
        android:visibility="gone">
        <TextView
            android:id="@+id/error_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/white"
            android:textSize="16dp" />
    </LinearLayout>
    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/building_list_refresh"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:minWidth="25px"
            android:minHeight="25px"
            android:clickable="true">
            <ListView
                android:id="@+id/building_list"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingTop="15dp"
                android:clipToPadding="false"
                android:divider="@color/light_grey"
                android:dividerHeight="1dp" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="normal"
                android:textSize="15dp"
                android:gravity="center"
                android:text="@string/no_buildings_in_list"
                android:id="@+id/no_buildings_text"
                android:textColor="@color/grey"
                android:layout_gravity="center" />
        </FrameLayout>
    </android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>

不确定您是否仍然有问题,但是我在遇到类似问题时发现了这个线程;在启用"不保留活动"选项后,我无法使崩溃发生,但是我设法通过将选项"背景过程限制"设置为"最多1个过程"来解决该问题。

最新更新