Xamarin表单 - 线程效率

时间:2017-08-10 13:52:45

标签: xamarin error-handling crash xamarin.android xamarin.forms

我正在开发一个Xamarin(PCL)跨平台应用程序,我目前正在我的Android物理设备和仿真器上进行测试。该应用程序在高端手机上完美运行,但"意外崩溃"关于三星S4等低端手机。它只在我执行多项活动和任务后崩溃。

我假设这与这些手机的任务线程容量有关。如果我在这方面是正确的,我应该如何使我的应用程序在所有手机上顺利运行并且没有错误?

编辑 - 错误显示"应用已意外关闭"。此错误不会出现在特定行上,因为它与代码无关。它只会打破某些年龄较大的"执行许多活动时的电话。活动示例包括:向数据库添加数据,更新/删除数据,从一个活动移动到另一个活动,显示用户输入数据的日历和饼图。

编辑2 - 处理图像的一些代码:

Xaml:

<ScrollView HorizontalOptions="Fill" Orientation="Horizontal">
                                <StackLayout Orientation="Vertical" BackgroundColor="GhostWhite" >
                                    <StackLayout Orientation="Horizontal" BackgroundColor="GhostWhite" >
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="dairy" Image="{Binding Dairy_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="alcohol" Image="{Binding Alcohol_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="eggs" Image="{Binding Egg_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="fastfood" Image="{Binding Fastfood_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="fish" Image="{Binding Fish_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="fruit" Image="{Binding Fruit_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="grain" Image="{Binding Grain_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="legume" Image="{Binding Legume_Image}"/>
                                    </StackLayout>
                                    <StackLayout Orientation="Horizontal" BackgroundColor="GhostWhite" >
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="meat" Image="{Binding Meat_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="munchies" Image="{Binding Munchies_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="nuts" Image="{Binding Nut_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="potato" Image="{Binding Potato_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="soda" Image="{Binding Soda_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="sweets" Image="{Binding Sweet_Image}"/>
                                        <Button HeightRequest="50" BackgroundColor="GhostWhite"  WidthRequest="50" Command="{Binding Button_Clicked_Food}" CommandParameter="vegetables" Image="{Binding Vegetable_Image}"/>
                                    </StackLayout>
                                </StackLayout>

.CS:

 public UserMealINC_vm(User_Profiles up, DateTime day)
        {
            try
            {
                Day = day;
                User_pro = up;
                Bool_Food_Type = false;
                Food_Name = "";
                Type = "";
                Food_Weight = "0";
                Selected_Food = new List<string>();

                //All meal item are first initialized with the non-coloured images
                Dairy_Image = "drawable/dairy.png";
                Alcohol_Image = "drawable/alcohol.png";
                Egg_Image = "drawable/eggs.png";
                Fastfood_Image = "drawable/fastfood.png";
                Fish_Image = "drawable/fish.png";
                Fruit_Image = "drawable/fruit.png";
                Grain_Image = "drawable/grain.png";
                Legume_Image = "drawable/legume.png";
                Meat_Image = "drawable/meat.png";
                Munchies_Image = "drawable/munchies.png";
                Nut_Image = "drawable/nuts.png";
                Potato_Image = "drawable/potato.png";
                Soda_Image = "drawable/soda.png";
                Sweet_Image = "drawable/sweets.png";
                Vegetable_Image = "drawable/vegetables.png";

                this.Button_Clicked_Food = new Command<string>((key) =>
                {
                    //Change the item selected from color to non-color, or vice-versa

                    if (Selected_Food.Contains(key))
                    {
                        if (key == "dairy")
                        {
                            Dairy_Image = "drawable/dairy.png";
                        }
                        else if (key == "alcohol")
                        {
                            Alcohol_Image = "drawable/alcohol.png";
                        }
                        else if (key == "eggs")
                        {
                            Egg_Image = "drawable/eggs.png";
                        }
                        else if (key == "fastfood")
                        {
                            Fastfood_Image = "drawable/fastfood.png";
                        }
                        else if (key == "fish")
                        {
                            Fish_Image = "drawable/fish.png";
                        }
                        else if (key == "fruit")
                        {
                            Fruit_Image = "drawable/fruit.png";
                        }
                        else if (key == "grain")
                        {
                            Grain_Image = "drawable/grain.png";
                        }
                        else if (key == "legume")
                        {
                            Legume_Image = "drawable/legume.png";
                        }
                        else if (key == "meat")
                        {
                            Meat_Image = "drawable/meat.png";
                        }
                        else if (key == "munchies")
                        {
                            Munchies_Image = "drawable/munchies.png";
                        }
                        else if (key == "nuts")
                        {
                            Nut_Image = "drawable/nuts.png";
                        }
                        else if (key == "potato")
                        {
                            Potato_Image = "drawable/potato.png";
                        }
                        else if (key == "soda")
                        {
                            Soda_Image = "drawable/soda.png";
                        }
                        else if (key == "sweets")
                        {
                            Sweet_Image = "drawable/sweets.png";
                        }
                        else if (key == "vegetables")
                        {
                            Vegetable_Image = "drawable/vegetables.png";
                        }
                        else
                        {
                            //Key out of bounds???
                        }

                        Selected_Food.Remove(key);
                    }
                    else
                    {
                        if (key == "dairy")
                        {
                            Dairy_Image = "drawable/dairy_color.png";
                        }
                        else if (key == "alcohol")
                        {
                            Alcohol_Image = "drawable/alcohol_color.png";
                        }
                        else if (key == "eggs")
                        {
                            Egg_Image = "drawable/eggs_color.png";
                        }
                        else if (key == "fastfood")
                        {
                            Fastfood_Image = "drawable/fastfood_color.png";
                        }
                        else if (key == "fish")
                        {
                            Fish_Image = "drawable/fish_color.png";
                        }
                        else if (key == "fruit")
                        {
                            Fruit_Image = "drawable/fruit_color.png";
                        }
                        else if (key == "grain")
                        {
                            Grain_Image = "drawable/grain_color.png";
                        }
                        else if (key == "legume")
                        {
                            Legume_Image = "drawable/legume_color.png";
                        }
                        else if (key == "meat")
                        {
                            Meat_Image = "drawable/meat_color.png";
                        }
                        else if (key == "munchies")
                        {
                            Munchies_Image = "drawable/munchies_color.png";
                        }
                        else if (key == "nuts")
                        {
                            Nut_Image = "drawable/nuts_color.png";
                        }
                        else if (key == "potato")
                        {
                            Potato_Image = "drawable/potato_color.png";
                        }
                        else if (key == "soda")
                        {
                            Soda_Image = "drawable/soda_color.png";
                        }
                        else if (key == "sweets")
                        {
                            Sweet_Image = "drawable/sweets_color.png";
                        }
                        else if (key == "vegetables")
                        {
                            Vegetable_Image = "drawable/vegetables_color.png";
                        }
                        else
                        {
                            //Key out of bounds???
                        }
                        Selected_Food.Add(key);
                    }
                });                
            }
            catch (Exception ex)
            {
                App.Current.MainPage.DisplayAlert("UserMealINC_vm 1!", ex.Message, "OK");
            }
        }

1 个答案:

答案 0 :(得分:1)

事实证明,我的应用程序中的所有多个图像都会溢出设备内存。 (正如@ hvaughan3所建议的那样)

This link has the answer to it.

您基本上只需在Android Manifest(在应用程序中)添加这两行 -

  

机器人:硬件加速=&#34;假&#34;
    机器人:largeHeap =&#34;真&#34;