Android, Parcels, startActivity

Was habe ich beim Rumspielen mit startActivity gelernt?

Idee / Aufgabe war das Starten einer Aktivität aus einer anderen. In einem Podcast hörte ich den Tip, nicht alles in einer Aktivität zu machen, da Android sehr allergisch auf nicht antwortende / langlaufende Aktivitäten reagiert und diese im Zweifelsfall einfach beendet. Es ist so etwa die Denkweise, die ich vom Scalaprogrammieren hörte: Immer alles delegieren und in so kleine Teile wie möglich verhackstücken. Ergebnisse am Ende asynchron zusammenfügen. Siehe Googles MapReduce.

Zur Sache:

1) Starten einer Aktivität:

a) zuerst versuchte Variante

    public void doPong(View view){
        Intent pongIntent = new Intent();
        String msg = new StringBuffer().append("Es ist jetzt ").append(Calendar.getInstance().getTime()).append(".").toString();
        Parcel p = Parcel.obtain();
        p.writeString(msg);
        PingData pingData = (PingData) PingData.CREATOR.createFromParcel(p); 
        pongIntent.putExtra("pingData", pingData);
        pongIntent.setClassName("net.dbungert.android.pingpong", "net.dbungert.android.pingpong.PongActivity");
        startActivity(pongIntent);
    }

Zu beachten: beim zweiten Parameter von setClassname ist der volle Name mit Package anzugeben. Auch wenn es redundant zum ersten ist.

b) verkürzte in einem Google Tutorial gefundene Variante ohne Parcel:

    public void doPing(View view){
        Intent myIntent = new Intent(PongActivity.this, PingActivity.class);
        PongActivity.this.startActivity(myIntent);
    }

2) Info, im Debugger gesehen: Die Parcels werden nicht als Objekt übergeben, sondern nur als Referenz. Zur Laufzeit im Intent steht nur eine ID, nicht mal eine Java-Objektreferenz.

3)

Advertisements
Dieser Beitrag wurde unter Uncategorized veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s