Activity wird nicht Visible

M

maniac205

Ambitioniertes Mitglied
10
Hallo,

ich habe folgendes Problem:
Eine Activity die ich via Intent starte wird nicht angezeigt. Ausgeführt wird sie, das ist an den Logs dieser zu erkennen, aber es wird weiterhin die Activity angezeigt von der der Intent kommt.
Die Activity soll eine "größere Aufgabe" ausführen (einen KeyStore laden und aus ihm ein paar Informationen lesen). Hierzu habe ich eine Activity die über eine ProgressBar den Fortschrift anzeigen soll. Sobald die Aufgabe ausgeführt ist beendet die Activity sich selbst mit "finish();".

Meine Frage ist nun:
Ab wann die Activity angezeigt wird und wie ich dann ohne weiteren Klick die "größere Aufgabe" starten kann.

Was ich bisher getan habe:
Ursprünglich hatte ich die Aufgabe in der onCreate()-Methode gestartet. (Klar hier ist die Activity noch nicht sichtbar.

Nun habe ich die Aufgabe in die onResume()-Methode verlagert, da diese ja eigentlich erst ausgeführt wird, sobald die Activity sichtbar ist. Aber Fehlanzeige. Die Activity wird nicht angezeigt.

Was mache ich falsch?
 
Zuletzt bearbeitet:
Größere Aufgaben gehören in einen Service oder einen AsyncTask. Du blockierst wahrscheinlich den UI-Thread, was man nicht tun sollte.

Gesendet von meinem MB525 mit Tapatalk 2
 
  • Danke
Reaktionen: maniac205
maniac103 schrieb:
Größere Aufgaben gehören in einen Service oder einen AsyncTask.

Danke für deinen Hinweiß. Das scheint das Problem zu lösen. Nur tritt nun ein anders Problem auf. Vermutlich auch ein Anfängerfehler :cool2:

Ich habe einige "Helper"-Klassen die verschiedene Funktionalitäten bereitstellen. z.B. eine Klasse die den KeyStore verwaltet und lädt. Holt sich Informationen aus den Preferences. Um dies zu ermöglichen habe ich die Klasse wie folgt definiert:

Code:
public class HelperKeyStore extends Activity {...}

Die Aufgabe wird nun in einem Thread der die Aufgabe ausführt. Welcher über einen Handler Statusmeldungen verschicken soll.

Code:
progDialog = new ProgressDialog(this);
				progDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
				progDialog.setMessage(getResources().getString(
						R.string.ActivityPreferences_txt_load_keystore));
progDialog.setMax(100);
progDialog.show();

progThread = new Thread() {
	@Override
	public void run() {
		String tag = "Thread Load Keystore";
			try {
				HelperKeystore ksHelper = new HelperKeystore();
				ksHelper.loadKeystore();
				progHandler.obtainMessage(1, 100, 0);
				Thread.sleep(50);
				progHandler.sendEmptyMessage(0);
			} catch (InterruptedException e) {
				Log.e(tag, "InterruptedException: " + e.getMessage());
				e.printStackTrace();
			}

		}
	};
				
progThread.start();

Der Handler ist wie folgt definiert:
Code:
private Handler progHandler = new Handler() {
	@Override
	public void handleMessage(Message msg) {
		String tag = "handleMessage().";
		switch (msg.what) {
		case 0:
			Log.d(tag, "Abgeschlossen");
			progDialog.dismiss();
			break;
		case 1:
			Log.d(tag, "msg arg1: " + msg.arg1);
			progDialog.setProgress(msg.arg1);
		}
	}
		
};

Das Problem:
Wenn ich das Programm nun Ausführe, dann bekomme ich eine "RuntimeException" die anscheinend mit dem Handler zusammenhängt.
An den Logs kann ich sehen, dass das Programm beim instanziieren des HelperKeystore abbricht.

Debug schreibt:
Thread ... RuntimeException
- Handler.<init>()
- HelperKeystore(Activity)<init>()
- HekperKeystre<init>()
- ...
-"Ausführende Activity".run()

Der ursprüngliche Beitrag von 14:30 Uhr wurde um 15:43 Uhr ergänzt:

Habe das Problem gelöst, indem ich den Context im Konstruktor der "Helper"-Klasse übergebe und die aufrufe (für die extends Activity) benötigt wird mit "context." durchführe.
 
Deine Helperklasse von AsyncTask ableiten zu lassen wäre wahrscheinlich trotzdem der bessere Weg. Das würde dir den ganzen Thread- und Handler-Kram abnehmen.

Gesendet von meinem MB525 mit Tapatalk 2
 
  • Danke
Reaktionen: maniac205

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
10
Aufrufe
221
swa00
swa00
SaniMatthias
Antworten
19
Aufrufe
955
swa00
swa00
M
  • maksimilian
Antworten
15
Aufrufe
1.700
maksimilian
M
Zurück
Oben Unten