1

Ich entwickle eine Xamarin (PCL) plattformübergreifende App, die ich gerade auf meinen Android Physical Devices und Emulatoren teste. Die App läuft perfekt auf den High-End-Handys, "stürzt aber unerwartet ab" auf dem Samsung S4 und solchen Low-End-Telefonen. Es stürzt nur ab, nachdem ich mehrere Aktivitäten und Aufgaben ausgeführt habe.Xamarin Forms - Thread Efficiency

Ich nehme an, dass etwas mit der Task-Thread-Kapazität dieser Telefone zu tun hat. Wenn ich in dieser Hinsicht richtig bin, wie soll ich meine App so gestalten, dass sie auf allen Telefonen reibungslos und fehlerfrei funktioniert?

Bearbeiten - Der Fehler lautet "Die App wurde unerwartet geschlossen". Dieser Fehler tritt nicht in einer bestimmten Zeile auf, da er nichts mit dem Code zu tun hat. Es bricht nur bei bestimmten "älteren" Telefonen ab, wenn viele Aktivitäten ausgeführt werden. Beispiele für Aktivitäten sind: Hinzufügen von Daten zur Datenbank, Aktualisieren/Löschen von Daten, Wechseln von einer Aktivität zu einer anderen, Anzeigen von Kalendern und Tortendiagrammen aus vom Benutzer eingegebenen Daten.

Edit 2 -Einige des Kodex, die mit Bildern beschäftigt:

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

Es hängt davon ab, welche Art von Abstürzen Sie erleben. Kümmern Sie sich um ein bisschen mehr? – Cheesebaron

+0

Was ist der Fehler? Wie sieht der Code aus? In welcher Linie stürzt es ab? – hvaughan3

+0

@ hvaughan3 Ich habe meine Frage bearbeitet. – TigerLionCheetah

Antwort

0

Es stellt sich heraus, dass der Gerätespeicher wurde von überschwemmt zu werden all die vielen Bilder, die ich in meiner App hatte. (Wie von @ hvaughan3)

This link has the answer to it.

Sie im Grunde müssen nur diese beiden Zeilen in ihr Android Manifest hinzufügen (unter Anwendung) -

android: hardwareAccelerated = "false"
android : largeHeap = "true"