2011年12月19日 星期一

Android - activity : launchMode(5) - onNewIntent()目的

最後補充一個method,就是 onNewIntent()
當A1 -> A2 -> A3 -> A2時,
A2的intent第1次來自A1,第2次來自A3。
但是這是在一般情況(也就是A2有重新產生實體instance),
如果沒有產生實體的話A2的intent會一直抓到來自A1的intent。
我們將A2設為singleInstance來確保不會重複產生實體,

進行A1 -> A2 -> A3 -> A2,如下圖所示

A1是程式起點,沒有intent傳過來,所以intent是null





















A2的intent是A1傳來,是Intent1



















A3的intent由A2傳來,是Intent2





















雖然A2由A3用Intent3呼叫,但在A2依然是Intent1



















第二次的A2雖然沒有產生實體,但是如果想要得到來自A3的intent的話,就必須使用onNewIntent()的方式來取得新的intent。請在A2中加上程式碼

public void onNewIntent(Intent intent){
        super.onNewIntent(intent);
        setIntent(intent);   
        TextView txt2 = (TextView) findViewById(R.id.TextView2_intent);
        txt2.setText("Intent : "+ getIntent().getStringExtra("intent"));
}

如此一來重新A1 -> A2 -> A3 -> A2,結果如下

























































 注意:這裡是Intent3




















可以看到當A3 -> A2 的時候,因為onNewIntent()裡面setIntent()的原因,因此A2裡面的Intent已經變成了來自A3的Intent3,而不再是舊有來自A1的Intent1了。


原始網站如下:
http://developer.android.com/reference/android/app/Activity.html#onNewIntent%28android.content.Intent%29
經測試結果不只是singleTop有作用而已,singleTask和singleInstance都有用。

沒有留言:

張貼留言