none
Problem mit Samsung-Handy RRS feed

  • Frage

  • Hallo Leute,
    ich habe eine App, die auf einem Handy (Samsung mit Android 9.0 API Ebene 28) beim Aufruf einer bestimmten Page immer
    eine out of Memory exception liefert.
    Am reellen Speicherbedarf sollte es nicht liegen, weil viel schwächer ausgestattete Handy's auch kein Problem haben.
    Weiters verwende ich auch keine Images, die größer als 48x48 Pixel sind.

    Alle anderen Handy's (Samsung, Huawei usw.) mit kleinerer API-Ebene funktionieren auch.

    Die max. Heapgröße für Java habe ich testweise auch schon in den Android-Optionen auf 2G gesetzt. Hat nichts geändert.

    Woran könnte es liegen?

    Vielen Dank im Voraus


    Christian Tauschek

    Montag, 17. Juni 2019 14:42

Antworten

  • Hallo Christian,

    vor einigen Jahren hat ich mit einem Samsung Geräte das selbe Problem. Ich habe einfach nur 8 Bilder mit einer Auflösung von 48x48 Pixel geladen und jedes mal eine out of memory exception erhalten. Aber auch nur auf diesem einem Samsung Gerät. 

    Ich habe auch nach Stundenlangen debuggen keine Lösung finden können. 

    Ich habe es dann so gelöst das ich die Bilder erst nach Fertigstellung der View asynchron in einem try/catch block nachgeladen habe. Kamm es zur einer exception, habe ich die Bilder durch Text ersetzt oder sie einfach weggelassen.

    Ich habe mich in den letzten Jahren dann auch oft mit anderen Android Entwicklern darüber unterhalten und sie konnten mir von ähnlich oder gleichen Problemen mit Samsung berichten.


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings

    Donnerstag, 20. Juni 2019 16:31

Alle Antworten

  • Hallo Christian,

    es wäre sicher hilfreich, wenn Du ein paar Details zu der betreffenden Page posten könntest. Worin unterscheidet die sich von anderen Pages, die problemlos laufen. Die entsprechende Stelle bzw. der vollständige Stacktrace sowie die exakte und vollständige Fehlermeldung wäre auch nützlich.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Montag, 17. Juni 2019 17:14
    Moderator
  • Hallo Stefan,
    ich habe das Problem, dass ich das Handy nur einmal kurz bei mir mit den Entwickleroptionen (USB-Debugging testen konnte). Dabei habe ich auch die out of Memory exception festgestellt.
    Zu dem Fehler kommt es auch nur zeitweise.
    Mir steht das Handy nicht länger zur Verfügung, da es sich um ein privates handelt.
    Ansonsten verteile ich die App über den Google-Playstore.

    Die problematische Page beinhaltet eigentlich nichts was nicht eine andere Page auch hat.

    Eine ListView mit Row's, die wiederum grid's mit einem kleinem Image enthält.
    Ich denke, dass das Problem nur an dieser ListView sein kann, weil die Page selbst ist nichts Besonderes. Diese enthält nur ein paar Buttons.

    Du findest das CellTemplate der ListView untenstehend.

    Aufgefallen ist mir auch, dass dieses Handy meine App nicht mehr automatisch über den Google-Playstore aktualisiert. Ich glaube, dies ist seit dem Aktivieren der Entwickleroptionen.

    mfg
    Christian

        class CMyListViewAufträge : CMyListView
        {
    
            public CMyListViewAufträge()
            {
                ItemTemplate = new DataTemplate(typeof(ListItemAuftragCell));
                HasUnevenRows = true;
            }
    
        }
    
        class ListItemAuftragCell : ViewCell
        {
            public ListItemAuftragCell()
            {
    
                //Auftrag Button
                CMyImageButton auftragButton = new CMyImageButton { Source = "buchuhr.png", HeightRequest = 40 };
                auftragButton.SetBinding(CMyImageButton.CommandProperty, new Binding(nameof(ObservableCJsonNetComClassAuftrag.CommandAuftragButton_Clicked)));
                auftragButton.SetBinding(CMyImageButton.CommandParameterProperty, new Binding("."));
                auftragButton.SetBinding(CMyImageButton.IsVisibleProperty, nameof(ObservableCJsonNetComClassAuftrag.showAuftragButton));
                
                //ANr
                CMyLabel lblANr = new CMyLabel { HorizontalOptions = LayoutOptions.Start, TextColor = Color.Black, FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(CMyLabel)) };
                lblANr.SetBinding(CMyLabel.TextProperty, nameof(ObservableCJsonNetComClassAuftrag.ANr));
                lblANr.SetBinding(CMyLabel.TextColorProperty, nameof(ObservableCJsonNetComClassAuftrag.ANrTextColor));
                //Frame ANr
                CMyFrame frANr = new CMyFrame { Content = lblANr, CornerRadius = 6, Padding = new Thickness(2,0,2,0) };
                frANr.SetBinding(CMyLabel.BackgroundColorProperty, nameof(ObservableCJsonNetComClassAuftrag.ANrBackgroundColor));
    
                //Name
                CMyLabel lblName = new CMyLabel { HorizontalOptions = LayoutOptions.Start, TextColor = Color.Black, FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(CMyLabel)) };
                lblName.SetBinding(CMyLabel.TextProperty, nameof(ObservableCJsonNetComClassAuftrag.Name));
    
                //Beschreibung
                CMyLabel lblBeschreibung = new CMyLabel { HorizontalOptions = LayoutOptions.FillAndExpand, TextColor = Color.Black, FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(CMyLabel)) };
                lblBeschreibung.SetBinding(CMyLabel.TextProperty, nameof(ObservableCJsonNetComClassAuftrag.Beschreibung));
    
                CMyGrid gridANrName = new CMyGrid()                                     //ANr, Name
                {
                    HorizontalOptions = LayoutOptions.FillAndExpand,
                    ColumnSpacing = 5,
                    RowDefinitions = { new RowDefinition() { Height = GridLength.Auto }, new RowDefinition() { Height = GridLength.Auto } },
                    ColumnDefinitions = { new ColumnDefinition() { Width = GridLength.Auto }, new ColumnDefinition() }
                };
                gridANrName.Children.Add(frANr, 0, 0);
                gridANrName.Children.Add(lblName, 1, 0);
    
                CMyGrid gridANrNameBeschreibung = new CMyGrid()                         //ANr, Name, Beschreibung
                {
                    RowDefinitions = { new RowDefinition() { Height = GridLength.Auto }, new RowDefinition() { Height = GridLength.Auto } },
                    ColumnDefinitions = { new ColumnDefinition() }
                };
                gridANrNameBeschreibung.Children.Add(gridANrName, 0, 0);
                gridANrNameBeschreibung.Children.Add(lblBeschreibung, 0, 1);
    
                CMyGrid grid = new CMyGrid()                                            //alles
                {
                    Padding = 2,
                    ColumnSpacing = 2,
                    RowDefinitions = { new RowDefinition() { Height = GridLength.Auto } },
                    ColumnDefinitions = { new ColumnDefinition { Width = auftragButton.HeightRequest },
                                          new ColumnDefinition { Width = GridLength.Star } }
                };
    
                int i = 0;
                grid.Children.Add(auftragButton, i++, 0);
                grid.Children.Add(gridANrNameBeschreibung, i++, 0);
    
                View = grid;
    
            }
    
        }


    Christian Tauschek


    Montag, 17. Juni 2019 18:45
  • Hallo Christian,

    vor einigen Jahren hat ich mit einem Samsung Geräte das selbe Problem. Ich habe einfach nur 8 Bilder mit einer Auflösung von 48x48 Pixel geladen und jedes mal eine out of memory exception erhalten. Aber auch nur auf diesem einem Samsung Gerät. 

    Ich habe auch nach Stundenlangen debuggen keine Lösung finden können. 

    Ich habe es dann so gelöst das ich die Bilder erst nach Fertigstellung der View asynchron in einem try/catch block nachgeladen habe. Kamm es zur einer exception, habe ich die Bilder durch Text ersetzt oder sie einfach weggelassen.

    Ich habe mich in den letzten Jahren dann auch oft mit anderen Android Entwicklern darüber unterhalten und sie konnten mir von ähnlich oder gleichen Problemen mit Samsung berichten.


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings

    Donnerstag, 20. Juni 2019 16:31