2017-08-10 45 views
1

我正在开发一个Xamarin(PCL)跨平台应用程序,我目前正在测试Android物理设备和仿真器。该应用在高端手机上运行得非常完美,但三星S4和其他低端手机的“意外崩溃”。它只会在我执行多个活动和任务后崩溃。Xamarin Forms - 线程效率

我假设这与这些手机的任务线程容量有关。如果我在这方面是正确的,我应该如何让我的应用程序在所有手机上都能顺畅无误地运行?

编辑 - 错误说“应用程序意外关闭”。此错误不会显示在特定的行上,因为它与代码无关。当执行许多活动时,它只会在某些“老”手机上打破。活动示例包括:将数据添加到数据库,更新/删除它们,从一个活动移动到另一个活动,从用户输入的数据中显示日历和饼图。

的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"); 
      } 
     } 
+0

这取决于您遇到的是什么样的崩溃。谨慎地详细阐述一下? – Cheesebaron

+0

什么是错误?代码是什么样的?它会发生什么事? – hvaughan3

+0

@ hvaughan3我编辑了我的问题。 – TigerLionCheetah

回答

0

事实证明,该设备存储器渐渐由溢出

编辑,与涉及的图像代码的2 - 部分所有我在我的应用程序中的多个图像。 (正如@ hvaughan3建议)

This link has the answer to it.

你基本上只需要这两行中添加Android清单(在应用程序) -

安卓硬件加速= “假”
机器人:largeHeap =“true”