Другие действия также вынесены на первый план в StartActivity.

У меня есть два действия (A и B) в моем приложении и несколько BroadcastReceiver.

Я встречаю следующий сценарий:

A запущен и был закрыт с помощью кнопки "Домой" (был вызван onStop).

Некоторое время спустя BroadcastReceiver сработал с каким-то намерением. Он запускает следующий код:

            Intent activityIntent = new Intent(context,
                    B.class);
            activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_CLEAR_TOP);

            context.startActivity(activityIntent);

И B действительно запущен, однако A также вынесен на передний план (позади B). Как я могу избежать появления A?


person Mugen    schedule 20.08.2014    source источник
comment
вы можете вызвать finish() для обратного вызова onPause() активности A.   -  person Parth Kapoor    schedule 20.08.2014


Ответы (2)


когда вы нажимаете кнопку «Домой», вы на самом деле не закрываете приложение (я имею в виду, что оно находится в состоянии паузы), и оно находится в заднем стеке, и всякий раз, когда вы запускаете новое действие того же приложения и закрываете это действие, оно выводит верхнюю активность в задний стек. , Так что, если вам это не нужно, попробуйте следующий код

@Override
public void onStop() {
    if(!isFinishing())
       finish(); 
    super.onStop();
}
person Sam    schedule 20.08.2014
comment
Спасибо, это решение работает. Однако окончание A в этот момент не ожидается пользователем, и я бы предпочел избежать этого, если это возможно. - person Mugen; 21.08.2014

Из BoardcastReceiver вы можете запустить действие B, используя этот фильтр намерений. Это очистит стек действий и вытолкнет действие A из стека.

Intent intent = new Intent(context,B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
context.startActivity(intent);
person Dhruba Bose    schedule 20.08.2014