Hur vet man varför en app hänger sig?

Diskussion i 'Frågor, support och diskussion' startad av Maxxan, 25 sept 2012.

  1. Maxxan

    Maxxan Youth Droid Medlem

    Blev medlem:
    22 mar 2010
    Inlägg:
    162
    Mottagna gillanden:
    4

    MINA ENHETER

    Jag gjorde en app som jag tror hänger sig när den ska skapa en ExpandableListView. Men jag vet inte säkert mer än att det funkar när jag inte har en ExpandableListView. Förstår inte riktigt hur man ska tolka felrapporterna när en app slutar svara eller hur man ska fixa det. :(

    Så det jag undrar är, hur hittar man vad som är problemet? Vad ska man leta efter i logfilen? Här är en logcat från appen som exempel.

    Bli medlem eller för att visa innehållet!
     
  2. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    När jag kollar i din logg så letar jag först efter app-namnet som är:
    com.lostpixels.fieldservice
    Läs loggfilen nerifrån och upp.

    Felet uppstår här någonstans:
    09-17 14:05:25.860 I/dalvikvm(5354): at com.lostpixels.fieldservice.ReturnVisitsTab.setupE xpandableListFragment(ReturnVisitsTab.java:1184)

    Dvs. i filen ReturnVisitsTab.java på rad 1184 när metoden setupExpandableListFragment() anropas.

    Sätt en breakpoint på den raden och starta debuggern. Kör till breakpointen och stega sedan framåt tills det smäller. Sätt en ny breakpoint där. Kör debuggern igen och stega in där det small. Stega vidare tills du lämnar din egen kod och hamnar i en klass från Android. Då vet du vilket av dina anrop som orsakade problemet.

    I loggen kring metodanropet setupExpandableListFragment() så är det mycket layout-arbete som görs så min gissning är att det är något problem med din layout för fragmentet. Testa i så fall att göra din layout så enkel som möjlligt genom att ta bort det mesta från det och göra den minimal. När du väl får det att fungera så lägger du tillbaks saker i layouten tills det smäller på nytt. Då vet du vad som är fel.
     
  3. Maxxan

    Maxxan Youth Droid Medlem

    Blev medlem:
    22 mar 2010
    Inlägg:
    162
    Mottagna gillanden:
    4

    MINA ENHETER

    Okej tack, ska kolla där. Det funkar bra för mig, men jag ska testa och göra lite ändringar och skicka till henne som har problemet. Kanske lägga på lite extra loggning för att se hur långt den kommer.

    Men hur gör man när det är en stacktrace som inte alls refererar till min kod? Jag har fått några sådana rapporter.

    Tex:
    Bli medlem eller för att visa innehållet!
     
  4. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Aha, jag förstod inte att det var loggar från andra användare.

    Det känns som att själva felet saknas i loggarna...
     
  5. appel

    appel Professional Droid Medlem

    Blev medlem:
    13 aug 2009
    Inlägg:
    2 111
    Mottagna gillanden:
    123

    MINA ENHETER

    Appen gör alltså något på GUI tråden som tar för lång tid. Vad gör du förutom att inflata vyn i det här läget som kan ta lång tid? Du skulle ju kunna använda traceview för att få lite koll på vad som händer och hur lång tid olika saker tar tex.
     
  6. Maxxan

    Maxxan Youth Droid Medlem

    Blev medlem:
    22 mar 2010
    Inlägg:
    162
    Mottagna gillanden:
    4

    MINA ENHETER

    Jag gör inte så mycket på GUI tråden så jag förstår inte riktigt vad som tar tid. Jag gör ingen filläsning, nätverkskommunikation eller liknande på GUI tråden.

    Här är koden som första exemplet refererar till:
    Kod:
    private View setupExpandableListFragment(int iPage) {
    LayoutInflater inflater = getLayoutInflater();
    View view = inflater.inflate(R.layout.expandedlistviewfragment, null, false); // Rad 1184
        	
    ExpandableListView lwExpandableList = (ExpandableListView) view.findViewById(R.id.ExpandableListView);
    TextView emptyText = (TextView)view.findViewById(R.id.EmptyExpandableListText);
    lwExpandableList.setEmptyView(emptyText);
    
    och expandedlistviewfragment ser ut som:
    HTML:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true" >
    
        <ExpandableListView
            android:id="@+id/ExpandableListView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
        </ExpandableListView>
    
        <TextView
            android:id="@+id/EmptyExpandableListText"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="@string/strNothingToDisplay"
            android:gravity="center_vertical|center_horizontal"
            android:textAppearance="?android:attr/textAppearanceMedium" >
        </TextView>
    
    </RelativeLayout>
     
    Last edited: 25 sept 2012
  7. Maxxan

    Maxxan Youth Droid Medlem

    Blev medlem:
    22 mar 2010
    Inlägg:
    162
    Mottagna gillanden:
    4

    MINA ENHETER

    Jag la till lite loggning och skickade till hon som hade problemet och det är verkligen raden View view = inflater.inflate(R.layout.expandedlistviewfragment, null, false); där det hänger sig. XML koden som den använder finns i föregående inlägg. Jag har även testat att ta bort textvyn så det bara är en ExpandableListView.

    Är det någon som har en idé vad det skulle kunna bero på?