Autore Topic: Array di stringhe ANR su alcuni dispositivi  (Letto 367 volte)

Offline swet90

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    Davide Antonelli
  • Sistema operativo:
    Windows 8
Array di stringhe ANR su alcuni dispositivi
« il: 15 Ottobre 2017, 10:08:17 CEST »
0
Salve a tutti ragazzi, ho di nuovo bisogno di voi, ho scritto un app e l' ho pubblicata sul play store, da qualche tempo, ricevo delle segnalazioni di ANR riguardo questa riga di codice:

Codice (Java): [Seleziona]
final String[] beerType=getResources().getStringArray(R.array.beerType);
su molti dispositivi che ho provato, l'app gira senza problemi, poi invece mi ritrovo con questi anr sul play store.

R.Array.beerType è così composto:

Codice (XML): [Seleziona]
<resources>
    <string name="OG">Densità iniziale: </string>
    <string name="FG">Densità finale: </string>
    <string name="Grado_Alcolico">Grado Alcolico: </string>
    <string name="InserisciBrixMosto">Inserisci il Brix del mosto</string>
    <string name="BrixDopoFermentazione">Grado Brix dopo fermentazione</string>
    <string name="OGMosto">Densità iniziale mosto </string>
    <string name="FGMosto">Densità finale mosto </string>
    <string name="GradoSRM">Inserisci il grado SRM della tua birra </string>
    <string name="btnCalcola">Calcola</string>
    <string name="btnEBC">Verifica</string>
    <string name="in_Bottiglia">in bottiglia: </string>
    <string name="app_name">Beer Calculator</string>
    <string name="action_settings">Impostazioni</string>
    <string name="CheckCorrectText">Si è verificato un errore, assicurati di aver inserito tutti i dati</string>
    <string name="PageGravityTitle">Densità</string>
    <string name="PageBrixTitle">Brix</string>
    <string name="PageColorTitle">Verifica Colore</string>

    <string name="section_format">Hello World from section: %1$d</string>
    <!--<string name="banner_ad_unit_id">ca-app-pub-3940256099942544/6300978111</string>--><!--TEST-->

    <!-- TODO: Remove or change this placeholder text -->
    <string name="hello_blank_fragment">Hello blank fragment</string>
    <array name="beerType">
        <item></item>                               <!--0-->
        <item></item>                               <!--1-->
        <item>Molto chiaro</item>                      <!--2-->
        <item>Molto chiaro, Chiaro</item>                <!--3-->
        <item>Chiaro</item>                           <!--4-->
        <item>Oro</item>                           <!--5-->
        <item>Oro, Ambra (giallo marroncino)</item>  <!--6-->
        <item>Ambra (giallo marroncino)</item>        <!--7-->
        <item>Ambra scuro/rame chiaro</item>        <!--8-->
        <item>Rame (marrone rosso)</item>         <!--9-->
        <item>Rame scuro/marrone chiaro</item>        <!--10-->
        <item>Marrone</item>                          <!--11-->
        <item>Marrone scuro</item>                     <!--12-->
        <item>Marrone molto scuro</item>                <!--13-->
        <item>Nero</item>                          <!--14-->
        <item>Nero, opaco</item>                  <!--15-->

    </array>
</resources>


mentre il rapporto sull'arresto anomalo é questo:

Codice: [Seleziona]
at android.content.res.Resources.getStringArray (Resources.java:1746)
  at davide.com.beercalculator.BeerColor.onCreateView (BeerColor.java:47)
  at android.support.v4.app.Fragment.performCreateView (Fragment.java:2184)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1298)
  at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible (FragmentManager.java:2323)
  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManager.java:2136)
  at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps (FragmentManager.java:2092)
  at android.support.v4.app.FragmentManagerImpl.execSingleAction (FragmentManager.java:1969)
  at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss (BackStackRecord.java:620)
  at android.support.v4.app.FragmentPagerAdapter.finishUpdate (FragmentPagerAdapter.java:143)
  at android.support.v4.view.ViewPager.populate (ViewPager.java:1268)
  at android.support.v4.view.ViewPager.setCurrentItemInternal (ViewPager.java:668)
  at android.support.v4.view.ViewPager.setCurrentItemInternal (ViewPager.java:630)
  at android.support.v4.view.ViewPager.setCurrentItem (ViewPager.java:611)
  at android.support.design.widget.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected (TabLayout.java:2178)
  at android.support.design.widget.TabLayout.dispatchTabSelected (TabLayout.java:1155)
  at android.support.design.widget.TabLayout.selectTab (TabLayout.java:1148)
  at android.support.design.widget.TabLayout.selectTab (TabLayout.java:1118)
  at android.support.design.widget.TabLayout$Tab.select (TabLayout.java:1413)
  at android.support.design.widget.TabLayout$TabView.performClick (TabLayout.java:1523)
  at android.view.View$PerformClick.run (View.java:22596)
  at android.os.Handler.handleCallback (Handler.java:739)
  at android.os.Handler.dispatchMessage (Handler.java:95)
  at android.os.Looper.loop (Looper.java:148)
  at android.app.ActivityThread.main (ActivityThread.java:7331)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1230)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)

non riesco a capire per quale motivo accada questo. Sapete aiutarmi?

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Array di stringhe ANR su alcuni dispositivi
« Risposta #1 il: 16 Ottobre 2017, 09:17:25 CEST »
0
L'errore riportato è molto anomalo: "getStringArray" non è un metodo particolarmente lento dal quale ci si può aspettare un ANR, ma considera questo: l'ANR viene sollevato quanto l'applicazione non "risponde" entro 5 secondi, questo significa che di fatto la "lentezza" può essere altrove e, per qualche ragione, l'accesso alle risorse diventa la goccia che fa traboccare il vaso.

Esempio: Supponiamo che nella tua app ci sia un metodo che, per certi dispositivi un po' più lenti, richiede 4,9 secondi, mentre la getStringArray ne impiega 0,2 secondi. L'ANR viene sollevato dopo 5 secondi, che ricadono esattamente durante l'esecuzione della getStringArray, ma il vero problema è il metodo da 4,9 secondi.

Ti suggerisco quindi di analizzare tutte le chiamate effettuate nella BeerColor.onCreateView prima di getStringArray e cercare lì il problema.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.