Nach 4x Activities aufrufen Error

kukuk

kukuk

App-Anbieter (kostenlos)
29
Hallo wenn ich eine neue activity von der main auf rufe und das ganze 4 mal hinter einander, schmeißt mir die App eine Fehlermeldung an die Backe.

Hab schon in der Oncreate alles weggeklammert und trotzdem kommt der fehler nach 4 mal öffnen und wieder schließen einer Activity, die dann wieder die main öffnet.

LogCat auszug:




02-25 21:06:23.631: E/AndroidRuntime(1355): FATAL EXCEPTION: main
02-25 21:06:23.631: E/AndroidRuntime(1355): Process: com.arbeitszeit_kalkulator_pro, PID: 1355
02-25 21:06:23.631: E/AndroidRuntime(1355): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.arbeitszeit_kalkulator_pro/com.arbeitszeit_kalkulator_pro.MainActivity}: android.view.InflateException: Binary XML file line #166: Error inflating class <unknown>
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2200)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.app.ActivityThread.access$800(ActivityThread.java:139)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.os.Handler.dispatchMessage(Handler.java:102)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.os.Looper.loop(Looper.java:136)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.app.ActivityThread.main(ActivityThread.java:5105)
02-25 21:06:23.631: E/AndroidRuntime(1355): at java.lang.reflect.Method.invokeNative(Native Method)
02-25 21:06:23.631: E/AndroidRuntime(1355): at java.lang.reflect.Method.invoke(Method.java:515)
02-25 21:06:23.631: E/AndroidRuntime(1355): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
02-25 21:06:23.631: E/AndroidRuntime(1355): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
02-25 21:06:23.631: E/AndroidRuntime(1355): at dalvik.system.NativeStart.main(Native Method)
02-25 21:06:23.631: E/AndroidRuntime(1355): Caused by: android.view.InflateException: Binary XML file line #166: Error inflating class <unknown>
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.view.LayoutInflater.createView(LayoutInflater.java:620)
02-25 21:06:23.631: E/AndroidRuntime(1355): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
02-25 21:06:23.631: E/AndroidRuntime(1355): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:315)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.app.Activity.setContentView(Activity.java:1973)
02-25 21:06:23.631: E/AndroidRuntime(1355): at com.arbeitszeit_kalkulator_pro.MainActivity.onCreate(MainActivity.java:2556)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.app.Activity.performCreate(Activity.java:5275)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
02-25 21:06:23.631: E/AndroidRuntime(1355): ... 11 more
02-25 21:06:23.631: E/AndroidRuntime(1355): Caused by: java.lang.reflect.InvocationTargetException
02-25 21:06:23.631: E/AndroidRuntime(1355): at java.lang.reflect.Constructor.constructNative(Native Method)
02-25 21:06:23.631: E/AndroidRuntime(1355): at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.view.LayoutInflater.createView(LayoutInflater.java:594)
02-25 21:06:23.631: E/AndroidRuntime(1355): ... 28 more
02-25 21:06:23.631: E/AndroidRuntime(1355): Caused by: java.lang.OutOfMemoryError
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.content.res.Resources.loadDrawable(Resources.java:2150)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.content.res.Resources.getDrawable(Resources.java:715)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:176)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:937)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.content.res.Resources.loadDrawable(Resources.java:2132)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.widget.ImageView.<init>(ImageView.java:129)
02-25 21:06:23.631: E/AndroidRuntime(1355): at android.widget.ImageView.<init>(ImageView.java:119)
02-25 21:06:23.631: E/AndroidRuntime(1355): ... 31 more
 
Code:
02-25 21:06:23.631: E/AndroidRuntime(1355): Caused by: java.lang.OutOfMemoryError

Du allozierst da irgendwas (Bilder?) und räumst es im onPause() o.ä. nicht auf.
 
  • Danke
Reaktionen: kukuk
+1 fur die richtige Bezeichnung für Allocation als Verb :)
 
In der oncreate lade ich icons auf meinen imageviews.


Hab Jetzt mit Android:large_heap ="true" die Anwendung erstmal zum laufen bekommen.

Wie räumt man denn vernünftig auf? Kannst mir helfen? Finish(); räumt ja scheinbar nicht auf.

Ich mach IMG.setimageresource(R.........)
 
Klingt mir aber auch ganz danach dass du viele Activities auf den Stack packst die viele Ressourcen haben wie wärst wenn du jede activity finsh ()'st bevor du zur nächsten gehst?
 
Sobald ich eine neue activity aufrufe, beende ich die alte mit finish();
 
finish() räumt nix (jedenfalls weniger als du denkst) auf, sondern tippt nur die entsprechenden Lifecycle-Methoden an. Faustregel: Was du in onCreate lädst, solltest du in onPause() onStop() oder onDestroy() (je nachdem was es ist) wieder aufräumen.

Ohne Glaskugel kann man da nicht konkreter werden :D
 
Ach Kot, habe ich ja gar nicht geschrieben was ich in der oncreate so TU.

Ich lade 4x imageViews mit setimageresource(r.drawable....)

Und mit someview view = findview(r.layout. Main....) view.setbackgroundcolor(color.RGB(......)

Die sachen lade ich rein.

Und ondestroy wird aufgerufen wenn ich finish(); sage?
 
Wenn "view" eine Instanzvariable ist, kann das System das so nicht aufräumen.
Dann kannst du es mit einem view=null im onDestroy() versuchen.

Ich wundere mich allerdings schon etwas, dass der GC die alten Activities nicht komplett weggeräumt bekommt. Vielleicht guckst du einfach mal zur Sicherheit (LogCat), ob deine onDestroy()s wirklich aufgerufen werden. Netter Bug ist zB, wenn man onDistroy() schreibt :D
 
Zuletzt bearbeitet:
So rufe ich neue Activities auf:
Code:
Intent intent = new Intent (this, StempeluhrActivity.class);
		startActivity(intent);
		
	finish();


und das wir in der oncreate gemacht:



Code:
TextView überstunden = (TextView)findViewById(R.id.textView5);
		TextView überstunden_abbau = (TextView)findViewById(R.id.textView6);
		TextView stempeluhr = (TextView)findViewById(R.id.textView8);
		TextView übersicht = (TextView)findViewById(R.id.textView9);
		
		ImageView img_ubersicht = (ImageView)findViewById(R.id.imageView4);
		ImageView img_stempeluhr = (ImageView)findViewById(R.id.imageView3);
		ImageView img_uberstunden = (ImageView)findViewById(R.id.imageView1);
		ImageView img_uberstunden_abbau = (ImageView)findViewById(R.id.imageView2);
		
		
		TextView anzahl_der_überstunden = (TextView)findViewById(R.id.textView3);
		TextView gesamt_überstunden = (TextView)findViewById(R.id.textView2);
	//	TextView arbeitszeit_kalkulator = (TextView)findViewById(R.id.textView001);
		
		TextView stundenlohn_text = (TextView)findViewById(R.id.textView1);
		TextView stundenlohn = (TextView)findViewById(R.id.textView4);
		TableLayout tablelayout1 = (TableLayout)findViewById(R.id.TableLayout_stempeluhr);
		
		if (Global.schwarz){
			
//			überstunden_abbau.setBackgroundResource(R.drawable.custom_btn_blue);
					//	überstunden_abbau.setTextColor(Color.BLACK);
					//	überstunden.setBackgroundResource(R.drawable.custom_btn_blue);
					//	überstunden.setTextColor(Color.BLACK);
					stundenlohn_text.setTextColor(Color.rgb(220, 220, 220));
					stundenlohn.setTextColor(Color.rgb(220, 220, 220));
					tablelayout1.setBackgroundColor(Color.rgb(0,0,0));
					
					überstunden.setTextColor(Color.rgb(220, 220, 220));
					überstunden_abbau.setTextColor(Color.rgb(220, 220, 220));
					stempeluhr.setTextColor(Color.rgb(220, 220, 220));
					übersicht.setTextColor(Color.rgb(220, 220, 220));
					
					img_ubersicht.setImageResource(R.drawable.ubersicht_selector_blue);
					img_stempeluhr.setImageResource(R.drawable.stempeluhr_selector_blue);
					img_uberstunden.setImageResource(R.drawable.uberstunden_selector_blue);
					img_uberstunden_abbau.setImageResource(R.drawable.uberstunden_abbau_selector_blue);
					//	überstunden_stempeluhr.setBackgroundResource(R.drawable.custom_btn_blue);
					//	überstunden_stempeluhr.setTextColor(Color.BLACK);
						
					//übersicht_anzeigen.setBackgroundResource(R.drawable.custom_btn_blue);
					//	übersicht_anzeigen.setTextColor(Color.BLACK);
					
					anzahl_der_überstunden.setTextColor(Color.rgb(220, 220, 220));
					//arbeitszeit_kalkulator.setTextColor(Color.BLACK);
					gesamt_überstunden.setTextColor(Color.rgb(220, 220, 220));
					
					 View someView = findViewById(R.id.main_layout);

					  // Find the root view


					  // Set the color
					  someView.setBackgroundColor(Color.rgb(0,0,0));
		}
 
Wenn das alles ist, ist da eigentlich nichts zum Garbage Collecten. Aber sowas kann den Speicher eigentlich nur vollmachen, wenn die Bilder "viel zu groß" sind.

Oder du verheimlichst uns was :D
 

Ähnliche Themen

Helmut1A
  • Helmut1A
Antworten
7
Aufrufe
1.128
Helmut1A
Helmut1A
5
Antworten
22
Aufrufe
1.423
590239
5
M
  • myoggradio
Antworten
1
Aufrufe
779
myoggradio
M
Zurück
Oben Unten