當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都有用。
沒有留言:
張貼留言