Подтвердить что ты не робот

Как получить дополнительные намерения, если активность "singleTask"?

У меня есть активность, которая является 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. Поскольку MyActivity есть singleTask, он не будет создавать новый, вместо этого он просто вернется к существующему экземпляру MyActivity.

Мой вопрос: как получить дополнительные данные из AaaActivity в MyActivity?

Вы можете видеть, что я зарегистрировал методы onCreate и onResume, но он печатает лишние дополнительные данные.

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
4b9b3361

Ответ 1

Попробуйте установить тип launchMode вашего MyActivity как singleTop, а затем переопределите следующий метод для поиска нового намерения:

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

Ответ 2

Если у вас должна быть одна задача, используйте эти флаги для своих целей:

 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 в своей деятельности для обработки дополнительных функций.)