1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Activity wird nicht Visible

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von maniac205, 04.08.2012.

  1. maniac205, 04.08.2012 #1
    maniac205

    maniac205 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    97
    Erhaltene Danke:
    6
    Registriert seit:
    01.07.2010
    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: 04.08.2012
  2. maniac103, 05.08.2012 #2
    maniac103

    maniac103 Android-Lexikon

    Beiträge:
    1,237
    Erhaltene Danke:
    1,157
    Registriert seit:
    24.01.2011
    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
     
    maniac205 bedankt sich.
  3. maniac205, 05.08.2012 #3
    maniac205

    maniac205 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    97
    Erhaltene Danke:
    6
    Registriert seit:
    01.07.2010
    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.
     
  4. maniac103, 05.08.2012 #4
    maniac103

    maniac103 Android-Lexikon

    Beiträge:
    1,237
    Erhaltene Danke:
    1,157
    Registriert seit:
    24.01.2011
    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
     
    maniac205 bedankt sich.

Diese Seite empfehlen