如果活动是`singleTask`,如何获得意图附加?

时间:2012-11-16 08:44:53

标签: android android-activity

我有一个活动,这是一个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));
    }
}

<activity android:name=".MyActivity" android:launchMode="singleTask" />

没有它已经启动,它启动了另一个名为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);
    }

}

在后一个版本中,有一个按钮会触发jumpToFirst方法启动第一个方法,并传递数据对aaa=bbb。由于MyActivitysingleTask,因此不会创建新的{1}},而只会返回现有的MyActivity实例。

我的问题是:如何从AaaActivity中的MyActivity获取传递的额外数据?

您可以看到我已记录onCreateonResume方法,但它会输出空的额外数据。

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

2 个答案:

答案 0 :(得分:102)

尝试将MyActivity launchMode 类型设置为 singleTop ,然后重写以下方法以查找新意图:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    //now getIntent() should always return the last received intent
}

答案 1 :(得分:1)

如果您必须拥有单个任务,那么请使用这些标志:

 resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK);

如果你也使用PendingIntent:PendingIntent.FLAG_CANCEL_CURRENT:

pIntent = PendingIntent.getActivity(context, 0, resultIntent, PendingIntent.FLAG_CANCEL_CURRENT ); 

(也可以在您的活动中使用onNewIntent来处理额外内容。)