Autore Topic: Errore stack trace  (Letto 753 volte)

Offline wlf

  • Utente normale
  • ***
  • Post: 359
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Errore stack trace
« il: 22 Ottobre 2014, 16:36:36 CEST »
0
Salve,
in alcuni casi ho degli strani errori dell'App come quello sottostante:

Codice: [Seleziona]
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.prova/com.example.prova.SegnalaActivity}: android.view.InflateException: Binary XML file line #14: Error inflating class <unknown>
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2200)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:620)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:315)
at android.app.Activity.setContentView(Activity.java:1973)
at com.example.prova.SegnalaActivity.onCreate(SegnalaActivity.java:72)
at android.app.Activity.performCreate(Activity.java:5275)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
... 11 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
... 25 more
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
at android.content.res.Resources.loadDrawable(Resources.java:2150)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.widget.ImageView.<init>(ImageView.java:129)
at android.widget.ImageView.<init>(ImageView.java:119)
... 28 more
android.view.InflateException: Binary XML file line #14: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:620)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:315)
at android.app.Activity.setContentView(Activity.java:1973)
at com.example.prova.SegnalaActivity.onCreate(SegnalaActivity.java:72)
at android.app.Activity.performCreate(Activity.java:5275)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
... 25 more
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
at android.content.res.Resources.loadDrawable(Resources.java:2150)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.widget.ImageView.<init>(ImageView.java:129)
at android.widget.ImageView.<init>(ImageView.java:119)
... 28 more
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:315)
at android.app.Activity.setContentView(Activity.java:1973)
at com.example.prova.SegnalaActivity.onCreate(SegnalaActivity.java:72)
at android.app.Activity.performCreate(Activity.java:5275)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
at android.content.res.Resources.loadDrawable(Resources.java:2150)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.widget.ImageView.<init>(ImageView.java:129)
at android.widget.ImageView.<init>(ImageView.java:119)
... 28 more
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
at android.content.res.Resources.loadDrawable(Resources.java:2150)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.widget.ImageView.<init>(ImageView.java:129)
at android.widget.ImageView.<init>(ImageView.java:119)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:315)
at android.app.Activity.setContentView(Activity.java:1973)
at com.example.prova.SegnalaActivity.onCreate(SegnalaActivity.java:72)
at android.app.Activity.performCreate(Activity.java:5275)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
at android.view.LayoutInflater.createView(LayoutInflater.java:620)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:315)
at android.app.Activity.setContentView(Activity.java:1973)
at com.example.prova.MenuVarieActivity.onCreate(MenuVarieActivity.java:25)
at android.app.Activity.performCreate(Activity.java:5275)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
... 25 more
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
at android.content.res.Resources.loadDrawable(Resources.java:2150)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.widget.ImageView.<init>(ImageView.java:129)
at android.widget.ImageButton.<init>(ImageButton.java:87)
at android.widget.ImageButton.<init>(ImageButton.java:83)
... 28 more
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:315)
at android.app.Activity.setContentView(Activity.java:1973)
at com.example.prova.MenuVarieActivity.onCreate(MenuVarieActivity.java:25)
at android.app.Activity.performCreate(Activity.java:5275)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
at android.content.res.Resources.loadDrawable(Resources.java:2150)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.widget.ImageView.<init>(ImageView.java:129)
at android.widget.ImageButton.<init>(ImageButton.java:87)
at android.widget.ImageButton.<init>(ImageButton.java:83)
... 28 more
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:315)
at android.app.Activity.setContentView(Activity.java:1973)
at com.example.prova.MenuVarieActivity.onCreate(MenuVarieActivity.java:25)
at android.app.Activity.performCreate(Activity.java:5275)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
at android.content.res.Resources.loadDrawable(Resources.java:2150)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.widget.ImageView.<init>(ImageView.java:129)
at android.widget.ImageButton.<init>(ImageButton.java:87)
at android.widget.ImageButton.<init>(ImageButton.java:83)

Alla riga SegnalaActivity.java:72 ho la setContentView della onCreate

Codice: [Seleziona]
setContentView(R.layout.activity_segnala);
Alla riga 14 dell'XML  ho il primo widget, un ImageView dentro ad un RelativeLayout:

Codice: [Seleziona]
<ImageView
L'errore non si verifica sempre tutte le volte, ma sporadicamente; se entro magari nella stessa activity al 100% delle volte funziona, ma in casi "paritcolari" che casomai vi illustro successivamente ho una probabilità di errore molto più alta. C'è qualcuno che dallo stack-trace riesce ad indicarmi qual'è questa "particolarità" che mette in crisi l'App? Idee sul motivo dell'errore? ;)

Grazie.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore stack trace
« Risposta #1 il: 22 Ottobre 2014, 16:53:41 CEST »
0
Stai usando immagini di dimensione geometrica (larghezza per altezza in pixel) molto grandi?

Anche immagini 1200x1200 possono generare errori di questo genere.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline wlf

  • Utente normale
  • ***
  • Post: 359
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Errore stack trace
« Risposta #2 il: 22 Ottobre 2014, 17:03:45 CEST »
0
Stai usando immagini di dimensione geometrica (larghezza per altezza in pixel) molto grandi?
Anche immagini 1200x1200 possono generare errori di questo genere.

Nel caso specifico l'ImageView che ha dato errore nello stack trace che ho postato aveva una immagine 871x145; uno stack-trace con un errore molto simile in un altra activity aveva una ImageView di 512x512, nulla di eccezionale in entrambe i casi.

Entrambe le activity utilizzate comunemente non danno mai alcun tipo di errore, solo utilizzando il telefono in un modo "particolare" danno questo tipo di errore ...

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore stack trace
« Risposta #3 il: 22 Ottobre 2014, 17:24:10 CEST »
+1
Citazione
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)

L'outofmemoryerror sulla decodifica dell'asset bitmap è abbastanza emblematico. Potrebbero essere troppe bitmap di dimensione media.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline wlf

  • Utente normale
  • ***
  • Post: 359
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Errore stack trace
« Risposta #4 il: 22 Ottobre 2014, 17:41:35 CEST »
0
L'outofmemoryerror sulla decodifica dell'asset bitmap è abbastanza emblematico. Potrebbero essere troppe bitmap di dimensione media.

Leggevo che l'occupazione reale in memoria è 4*altezza*larghezza (espresse in pixel). L'errore capita soprattutto quando uso la mia app con il telefono collegato in Miracast.
Immagino che questo significhi che Miracast si "mangia" una prozione significativa di memoria e quindi, l'app che prima girava tranquillamente, ha dei problemi a girare con immagini che mangiano porzioni di memoria considerevoli ...

Come si può fare per far convivere "capra e cavoli" (immagini di dimensioni ragguardevoli per non degradare troppo la qualità e non esaurire la memoria)? :)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore stack trace
« Risposta #5 il: 22 Ottobre 2014, 18:02:50 CEST »
0
Come si può fare per far convivere "capra e cavoli" (immagini di dimensioni ragguardevoli per non degradare troppo la qualità e non esaurire la memoria)? :)

Penso sia necessario passare a C++ su NDK.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline wlf

  • Utente normale
  • ***
  • Post: 359
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Errore stack trace
« Risposta #6 il: 23 Ottobre 2014, 09:33:33 CEST »
0
Penso sia necessario passare a C++ su NDK.

Sarebbe una soluzione radicale ma è eccessiva; immagino che mi convenga ripiegare su qualcosa di più "ragionevole". ;)

Non mi è chiaro come una immagine da 512x512 possa mettere in crisi uno smartphone da 2GB di RAM; prendendo per buono il valore d'occupazione che ho precedentemente descritto otterrei 1048576 bytes, nulla di esorbitante a mio avviso. ;)
Sempre che le immagini occupino memoria RAM; leggevo di una heap memory, ma nel mio caso, lo smartphone che ha avuto il problema, ha un
Total Heap Memory: 134217728 (128MB).

Devo però confessare che l'immagine di 512x512 in realtà non è unica; ho una animation-list che ha dentro 4 immagini con la sequenza

immagine1
immagine2
immagine3
immagine4
immagine3
immagine2

in questo modo ottengo come un effetto di andata e ritorno (l'animation è in in loop); ho poi una seconda animation-list con solo due immagini

immagine1
immagine2

Spero che queste animazioni non vengano caricate e tenute tutte in memoria altimenti lo spreco diventa enorme e se dovesse utilizzare solo la memoria Heap si fa presto ad esaurirla ... :(
Esiste magari qualche tecnica per non saturare tale memoria (magari con un riustilizzo sempre della stessa porzione)?


Offline wlf

  • Utente normale
  • ***
  • Post: 359
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Errore stack trace
« Risposta #7 il: 24 Ottobre 2014, 17:28:40 CEST »
0
Ho fatto ulteriori verifiche; possibile che tale errore sia legato ad un dispositivo specifico? Con uno smartphone (LG G2 con kitkat 4.4.2 build D80220b)  mi capita abbastanza sovente di ottenere lo stesso errore mentre con altri smartphone (marche e modelli diversi) non riesco mai a ricrearlo, neppure se faccio un uso "stressante" dell'App. :(

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore stack trace
« Risposta #8 il: 24 Ottobre 2014, 17:59:43 CEST »
0
Per le app nella dalvik (quelle scritte in java), la memoria disponibile è quella dell'heap ed è ricavabile così:

Codice (Java): [Seleziona]
long heapSize = Runtime.getRuntime().maxMemory();
Tieni conto che nel Nexus One erano 32MB, adesso sul Nexus 5 se non sbaglio sono 512MB.

Comunque questo vale sempre:
https://developer.android.com/training/displaying-bitmaps/manage-memory.html
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline wlf

  • Utente normale
  • ***
  • Post: 359
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Errore stack trace
« Risposta #9 il: 24 Ottobre 2014, 18:53:41 CEST »
0
Per le app nella dalvik (quelle scritte in java), la memoria disponibile è quella dell'heap ed è ricavabile così:

Codice (Java): [Seleziona]
long heapSize = Runtime.getRuntime().maxMemory();
Tieni conto che nel Nexus One erano 32MB, adesso sul Nexus 5 se non sbaglio sono 512MB.

In questo caso il risultato, come avevo già scritto, è 134217728 (128MB). Avevo gia controllato nelle specifiche tecniche di questo modello ...
Da task-manager mi dice che l'app che sto facendo girare consuma 105MB, ma non mi da un dettaglio di quanta memoria heap sto consumando. Da App ho usato:

Codice: [Seleziona]
Runtime.getRuntime().totalMemory();
Runtime.getRuntime().freeMemory();

Quando ho tappato per far partire la nuova activity mi ha dato rispettivamente i seguenti valori:
Codice: [Seleziona]
10-24 18:47:20.446: D/setOnItemClickListener(8588): Tappato totalMemory 113561600  freeMemory 4564368
Citazione
Comunque questo vale sempre:
https://developer.android.com/training/displaying-bitmaps/manage-memory.html

Io parto da ICS, quindi il problema per le precedenti versioni non si pone; ma sembra essere Kitkat più delicato che non JB. :(
Mi sarei atteso che avessero implementato un garbage collector automatico anche per le immagini dell'activity che non ho necessità di mantenerle in alcun modo ... :(

Offline wlf

  • Utente normale
  • ***
  • Post: 359
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Errore stack trace
« Risposta #10 il: 27 Ottobre 2014, 10:21:14 CET »
0
Sto facendo dei tentativi per eliminare il problema; nella activity dichiaro una variabile imageView per il mio widget:
Codice: [Seleziona]
private ImageView imgConnection;E' dichiarata non static, quindi mi aspetto che dovrebbe essere distrutta quando passo per la onDestroy dell'activity.
Nella onCreate l'ho istanziata:
Codice: [Seleziona]
imgConnection = (ImageView) findViewById(R.id.imageView1);
...
imgConnection.setImageLevel(1);
Gli setto un level che contiene un animation-list, quest'ultima ha 6 immagini che vengono ripetute in loop.
Sempre nella stessa activity richiamo anche un secondo imageLevel
Codice: [Seleziona]
imgConnection.setImageLevel(2);con una animation-list di 2 immagini.

Per cercare di liberare la memoria ho tolto i riferimenti ad imgConnection sperando che venisse quindi rilasciata la memoria:
Codice: [Seleziona]
        @Override
        protected void onDestroy() {
                super.onDestroy();
                imgConnection = null;
        }
Non ho ottenuto nessun miglioramento concreto. :(
Mi sarei atteso un miglioramento visto che dalla documentazione sembrerebbe che un widget non più istanziato liberi la memoria, ma così non è stato ... :(

Quando apro l'App ho un consumo di circa 30Mb della Heap memory, quando lancio l'activity con le animation-list arrivo a 100Mb; se esco dall'App e rientro ho ancora i 100Mb occupati, per ritornare al valore iniziale ho bisogno di eliminare l'App dalle attività recenti ...
Perché non si libera la memoria alla chiusrura dell'activity o al limite alla chiusura dell'app?

Offline wlf

  • Utente normale
  • ***
  • Post: 359
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Errore stack trace
« Risposta #11 il: 29 Ottobre 2014, 15:26:22 CET »
0
Continuando con i test con smartphone diversi ho notato delle significative differenze tra un dispositivo ed un altro ...
Un Xperia con la 4.3 e un display HD sembra consumare molta meno memoria, addirittura meno della metà, mentre Samsung Note ed LG G2 con la 4.4.2 ed display FHD soffrono maggiormente il problema. :(

Non mi è chiaro se la responsabilità sia più della versione del SO o la definizione del display anche se io punterei più su quest'ultima. A mio avviso il display FHD mette più in crisi la memory heap. :(


Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore stack trace
« Risposta #12 il: 29 Ottobre 2014, 15:35:33 CET »
0
Non mi è chiaro se la responsabilità sia più della versione del SO o la definizione del display anche se io punterei più su quest'ultima. A mio avviso il display FHD mette più in crisi la memory heap. :(

Potrebbe tornarmi se il display FHD implica la selezione di drawable in una categoria superiore (es xhdpi invece che hdpi), per cui deve maneggiare immagini globalmente più grandi.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline wlf

  • Utente normale
  • ***
  • Post: 359
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Errore stack trace
« Risposta #13 il: 29 Ottobre 2014, 17:11:33 CET »
0
Potrebbe tornarmi se il display FHD implica la selezione di drawable in una categoria superiore (es xhdpi invece che hdpi), per cui deve maneggiare immagini globalmente più grandi.

Beh, allora ti devo deludere ... ;)
Le immagini, per ora (fase di test), sono tutte nella cartella generica drawable; nelle cartelle drawable-xhdpi, etc ci sono solamente le iconde dell'App ic_launcher.png! ;)
Non penso che solamente queste facciano incrementare/raddoppiare il consumo di memoria ... :)

E' proprio per questo che sto andando per supposizioni senza avere la certezza assoluta e cercavo una conferma di quanto ipotizzato. Lo trovo poco sensato, ma test alla mano (logcat Runtime.getRuntime().maxMemory()) è quello che vedo dal debug.
Se riesco provo anche con un dispositivo HD con la 4.4.x per avere una controprova che sia la versione del SO o la risoluzione. ;)

--- edit ---
Provato ora con un S4 mini con 4.4.2 che dovrebbe avere una risoluzione qHD ed ho un consumo minore anche dei modelli HD!

qHD circa 21Mb
HD circa 31Mb
FHD circa 80MB

Praticamente più lo smartphone è "scarno" (riguardo il display) meno problemi di OutOfMemory ci sono ...
« Ultima modifica: 29 Ottobre 2014, 17:34:22 CET da wlf »