Reputation: 198328
I have an activity, which is a singleTask:
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.printf("### MyAcitvity.onCreate: " + getIntent().getExtras());
}
@Override
protected void onResume() {
super.onResume();
System.out.println("### MyActivity.onResume: " + getIntent().getExtras());
}
public void toNext(View v) {
startActivity(new Intent(this, AaaActivity.class));
}
}
and:
<activity android:name=".MyActivity" android:launchMode="singleTask" />
No it has been started, and it started another activity called AaaActivity
.
public class AaaActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aaa);
}
public void jumpToFirst(View v) {
Intent intent = new Intent(this, MyActivity.class);
intent.putExtra("aaa","bbb");
startActivity(intent);
}
}
In the later one, there is a button which will trigger the jumpToFirst
method to start the first one, and pass a data pair aaa=bbb
. Since MyActivity
is singleTask
, it won't create a new one, instead, it will just back to the existing MyActivity
instance.
My question is: how to get the passing extra data from AaaActivity
in MyActivity
?
You can see I have logged onCreate
and onResume
methods, but it prints null extra data.
11-16 08:44:17.833: INFO/System.out(5171): ### MyAcitvity.onCreate: null
11-16 08:44:19.417: INFO/System.out(5171): ### MyActivity.onResume: null
11-16 08:44:26.041: INFO/System.out(5171): ### MyActivity.onResume: null
11-16 08:44:28.897: INFO/System.out(5171): ### MyActivity.onResume: null
Upvotes: 36
Views: 14592
Reputation: 1283
If you must have single Task then use these flags for your intent:
resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK);
if you use PendingIntent so also: PendingIntent.FLAG_CANCEL_CURRENT :
pIntent = PendingIntent.getActivity(context, 0, resultIntent, PendingIntent.FLAG_CANCEL_CURRENT );
(also use onNewIntent
in your activity to handle the extras.)
Upvotes: 1
Reputation: 68187
Try setting the launchMode type of your MyActivity
as singleTop and then override the following method to look for the new intent:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
//now getIntent() should always return the last received intent
}
Upvotes: 117