GC_EXPLICIT freed 1198K, 12% free 17325K/19624K, paused 5ms+4ms, total 55ms???????

  • 9 Antworten
  • Letztes Antwortdatum
S

Shelly22

Fortgeschrittenes Mitglied
0
Hallo alle zusammen.

Kann mir wer sagen was das heißt oder bedeuten soll?

Code:
D/dalvikvm: GC_EXPLICIT freed 1198K, 12% free 17325K/19624K, paused 5ms+4ms, total 55ms

Das kommt nach einiger Zeit, wenn ich den Service laufen lassen. Und im Service ist eine while(); schleife die in einem Thread ist.
Die bricht dann ab nach 30min ca. und dann kommt die Fehlermeldung im LogCat.

Hat das irgendwas mit dem Cache/Ram zutun?
Kann ich den irgendwie ich den Thread pausieren, dann Cache/Ram leeren und wieder von vorne anfangen?


LG
 
Zuletzt bearbeitet:
Könnte natürlich sein, dass dein Service gekillt wurde wegen Speichermangel.
Service | Android Developers

Wenn er weiter laufen soll kannst du ja den als ForegroundService laufen lassen.

Services | Android Developers

Dann bekommt der eine höhere Priorität.

Kann ich Fragen was dein Service macht, dass er so lange läuft?
das klingt irgendwie nicht sehr Batterie schonend
 
Hallo. ForegroundService läuft er. Trotzdem passiert das.

Ich Arbeite an einem Widget. Da stelle ich eine Animation zusammen die ich steuern kann.

Sie wird so in den Thread mit der while(); schleife gemacht:

Code:
remoteViews.setViewVisibility(R.id.imageView1, View.GONE);
remoteViews.setViewVisibility(R.id.imageView2, View.VISIBLE);

So lasse ich mehrere Bilder anzeigen und nicht anzeigen.
So ensteht eine Animation. Nur auf dauer klappt das nicht wohl nicht.
Deswegen muss ich wissen wie ich den speicher zwischen durch leeren kann
im Thread oder so.

Oder wie schreibt man den ForegroundService?
Mache ich etwas falsch? Bis jetzt hats damit nicht geklappt.


LG
 
Mein Thread ist wohl dran schuld. Packt er halt nicht.

Code:
6-02 15:05:18.041  22250-22250/de.mk.de.mk.widgettest       D/SELinux: selinux_knoxprecontexthook:  Calling  selinux_knoxprecontexthook for uid: 10196 isSystemServer: 0 seinfo: default pkgname de.mk.widgetandroidtamago
06-02 15:05:18.041  22250-22250/de.mk.de.mk.widgettest       D/dalvikvm: Late-enabling CheckJNI
06-02 15:05:18.071  22250-22256/de.mk.de.mk.widgettest      I/dalvikvm: Debugger is active
06-02 15:05:18.091  22250-22250/de.mk.de.mk.widgettest       D/WidgetClass: WidgetUpdatetSich
06-02 15:05:28.251  22250-22250/de.mk.de.mk.widgettest       D/StatusClass: StatusClassIstGestartet
06-02 15:05:28.261  22250-22401/de.mk.de.mk.widgettest       V/MediaPlayer: decode(50, 220830, 885307)
06-02 15:05:28.311  22250-22250/de.mk.de.mk.widgettest       D/StatusClass: StatusClassLauft
06-02 15:05:28.351  22250-22250/de.mk.de.mk.widgettest       D/StatusClass: EndeStatusClass
06-02 15:25:18.202  22250-29987/de.mk.de.mk.widgettest       V/MediaPlayer: decode(52, 1106185, 11086)
06-02 15:36:51.569  22250-22402/de.mk.de.mk.widgettest       D/dalvikvm: GC_FOR_ALLOC freed 90K, 12% free 17068K/19292K, paused 73ms, total 76ms
06-02 15:36:51.569  22250-22402/de.mk.de.mk.widgettest       I/dalvikvm-heap: Grow heap (frag case) to 17.761MB for 46508-byte allocation
06-02 15:36:51.589  22250-22259/de.mk.de.mk.widgettest       D/dalvikvm: GC_FOR_ALLOC freed 30K, 12% free 17082K/19340K, paused 18ms, total 18ms
06-02 15:55:49.299  22250-22402/de.mk.de.mk.widgettest       D/dalvikvm: GC_FOR_ALLOC freed 331K, 11% free 17218K/19336K, paused 53ms, total 65ms
06-02 15:55:49.299  22250-22402/de.mk.de.mk.widgettest       I/dalvikvm-heap: Grow heap (frag case) to 17.930MB for 69752-byte allocation
06-02 15:55:49.319  22250-22259/de.mk.de.mk.widgettest       D/dalvikvm: GC_FOR_ALLOC freed 47K, 12% free 17239K/19408K, paused 20ms, total 20ms
06-02 16:05:18.264  22250-11149/de.mk.de.mk.widgettest      V/MediaPlayer: decode(52, 1106185, 11086)
06-02 16:05:18.664  22250-22254/de.mk.de.mk.widgettest       D/dalvikvm: GC_CONCURRENT freed 317K, 11% free 17311K/19408K, paused 3ms+2ms, total 31ms
06-02 16:15:01.673  22250-22254/de.mk.de.mk.widgettest      D/dalvikvm: GC_CONCURRENT freed 329K, 11% free 17367K/19404K, paused 5ms+2ms, total 55ms
06-02 16:24:44.481  22250-22254/de.mk.de.mk.widgettest       D/dalvikvm: GC_CONCURRENT freed 330K, 11% free 17421K/19404K, paused 3ms+4ms, total 42ms
06-02 16:25:18.324  22250-14157/de.mk.de.mk.widgettest      V/MediaPlayer: decode(52, 1106185, 11086)
06-02 16:31:46.904  22250-22254/de.mk.de.mk.widgettest       D/dalvikvm: GC_CONCURRENT freed 308K, 11% free 17497K/19508K, paused 20ms+3ms, total 70ms
06-02 16:41:40.202  22250-22254/de.mk.de.mk.widgettest       D/dalvikvm: GC_CONCURRENT freed 331K, 11% free 17553K/19508K, paused 3ms+3ms, total 41ms
06-02 16:45:18.395  22250-16753/de.mk.de.mk.widgettest       V/MediaPlayer: decode(52, 1106185, 11086)
06-02 16:51:23.131  22250-22254/de.mk.de.mk.widgettest       D/dalvikvm: GC_CONCURRENT freed 331K, 10% free 17606K/19508K, paused 4ms+2ms, total 55ms
06-02 16:57:18.448  22250-22402/de.mk.de.mk.widgettest       E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!
06-02 16:57:18.448  22250-22402/de.mk.de.mk.widgettest       W/dalvikvm: threadid=13: thread exiting with uncaught exception (group=0x410ffac8)
06-02 16:57:18.468  22250-22402/de.mk.de.mk.widgettest       E/AndroidRuntime: FATAL EXCEPTION: Thread-829
        java.lang.RuntimeException: system server dead?
        at android.appwidget.AppWidgetManager.updateAppWidget(AppWidgetManager.java:378)
        at de.mk.de.mk.widgettest .ActionClass$2.run(ActionClass.java:111)
        at java.lang.Thread.run(Thread.java:856)
        Caused by: android.os.TransactionTooLargeException
        at android.os.BinderProxy.transact(Native Method)
        at com.android.internal.appwidget.IAppWidgetService$Stub$Proxy.updateAppWidgetIds(IAppWidgetService.java:638)
        at android.appwidget.AppWidgetManager.updateAppWidget(AppWidgetManager.java:375)
        ... 2 more
06-02 17:01:19.583  22250-22254/de.mk.de.mk.widgettest       D/dalvikvm: GC_CONCURRENT freed 352K, 10% free 17639K/19508K, paused 6ms+1ms, total 66ms
06-02 17:02:27.920  22250-22402/de.mk.de.mk.widgettest       I/Process: Sending signal. PID: 22250 SIG: 9
06-02 17:02:27.940      754-850/?                              E/SmartFaceService - 3rd party pause: onChange, mOptionMenuOpened: false mSystemDialogOpened: false
 
also das ein- und ausblenden von views in einer while schleife für eine animation klingt für mich sehr sehr komisch.

zeig mal den code. da gibts doch sicher bessere lösungen für eine animation
 
Code kann ich nicht zeigen..Sehr sehr sehr sehr riesig.

Ja ich fragte schon oft "HIER" wie eine Animation geht im Widget.
Geht natürlich über ViewFlipper Art am besten.
Das weiß ich ja. Aber ich will eine Animation steuern. Und die ViewFlipper kannste nicht steuern.

Und Canvas im Widget? Das geht glaube nicht oder?

EDIT: Meine App aus dem Store. Da habe ich auch eine dauerhafte ViewFlipper Animation.
https://play.google.com/store/apps/...wxLDEsImRlLm1rLmFuZHJvaWRfbW90aW9ud2lkZ2V0Il0.
Aber halt immer das gleiche. Nichts änderbar.


LG
 
Zuletzt bearbeitet:
Gut ok. Habe es mal kleiner gemacht alles und das wichtigste genommen.
Der AnimationsThread ist im onStart() vom Service und wird ausgeführt.
Dauerhaft bis ich Ihn abbrechen will oder unterbrechen will.

Code:
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);

        Log.d(TAG, "AnimationStartet");
		
        Thread aniThread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    while(true){
					
                                remoteViews.setViewVisibility(R.id.imageView2, View.VISIBLE);
                                remoteViews.setViewVisibility(R.id.imageView3, View.GONE);
                                remoteViews.setViewVisibility(R.id.imageView4, View.GONE);
                                widgetManager.updateAppWidget(widgetIds, remoteViews);

                        try {
                            Thread.sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
						
                                remoteViews.setViewVisibility(R.id.imageView2, View.GONE);
                                remoteViews.setViewVisibility(R.id.imageView3, View.VISIBLE);
                                remoteViews.setViewVisibility(R.id.imageView4, View.GONE);
                                widgetManager.updateAppWidget(widgetIds, remoteViews);

                        try {
                            Thread.sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                                remoteViews.setViewVisibility(R.id.imageView2, View.GONE);
                                remoteViews.setViewVisibility(R.id.imageView3, View.GONE);
                                remoteViews.setViewVisibility(R.id.imageView4, View.VISIBLE);
                                widgetManager.updateAppWidget(widgetIds, remoteViews);                       

                        try {
                            Thread.sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                                remoteViews.setViewVisibility(R.id.imageView2, View.GONE);
                                remoteViews.setViewVisibility(R.id.imageView3, View.GONE);
                                remoteViews.setViewVisibility(R.id.imageView4, View.GONE);
                                widgetManager.updateAppWidget(widgetIds, remoteViews);

                        try {
                            Thread.sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
						
                    }
                } catch (InternalError e) {

                }
            }
        });
        aniThread.start();
    }
 
Ich stell jetzt mal vermutungen an:
Weil du den Thread für 2 Sekunden anhälst fliegt irgendwo im AppWidgetManager die RemoteException Exception.

hast du mal versucht das ganze ohne die sleep methode zu machen?
Zumindest zu Testzwecken.
weil
java.lang.RuntimeException: system server dead?
Das klingt sehr nach irgendwelchen timeouts in die du da läufst.
 
Naja wenn ich kein sleep(); nehme dann müsstest du ja wissen das alles sofort abgespielt wird.
Das ist zu schnell und bringt die Widget/Handy zum hängen.


LG

Der ursprüngliche Beitrag 02.06.2013 von 23:43 Uhr wurde 03.06.2013 um 00:19 Uhr ergänzt:

Naja ich denke ich habe es soweit nun hinbekommen ohne eine while(); schleife usw =)


Danke euch erstmal allen. Wenn ich weitere fragen oder Probleme habe melde ich
mich nochmal.


LG an euch
 
Zurück
Oben Unten