Android: флаг истории не учитывается
Вот сценарий:
Пользователь использует активность #1, чтобы запланировать тревогу (с помощью Android
AlarmManager
сервис), и возвращается к начальному экрану. Деятельность № 1 остается в стеке.AlarmReciever
"sonReceived()
называется как запланировано:@Override public void onReceive(Context context, Intent intent){ Intent intent = new Intent(context ,Activity2.class); intent.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY ); context.startActivity(intent); }
Занятие № 2 (
Activity2
) запускается успешно.public class Activity2 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_2); getWindow().addFlags( WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_FULLSCREEN ); } @Override protected void onResume() { super.onResume(); findViewById(R.id.dismiss_button).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { finish(); } } ); }
}
Пользователь нажимает кнопку (
R.id.dismiss_button
) чтобыfinish()
Занятие 2.- Система возвращается на домашний экран, как и ожидалось, но действие № 2 остается в стеке (оно появляется, когда пользователь нажимает кнопку "Недавние")
Обратите внимание, что в дополнение к настройке Intent.FLAG_ACTIVITY_NO_HISTORY
флаг для намерения, флаг также был указан в AndroidManifest.xml
(и я попробовал также каждый из них по отдельности):
<activity
android:name=".Activity2"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden"
android:launchMode= "singleInstance"
android:noHistory="true"
>
</activity>
Также флаг Intent.FLAG_ACTIVITY_NEW_TASK
требуется, так как действие № 2 запускается из AlarmReceiver
а не другой вид деятельности.
1 ответ
Флаг NO_HISTORY просто предотвращает это Activity
от появления в стеке задач, как только Activity
больше не видно В вашем случае, если вы должны были нажать HOME, когда Activity2
отображается, вы увидите, что Android звонит finish()
а также onDestroy()
на этой активности сразу (что не является обычным поведением, когда задача ставится в фоновом режиме).
Чтобы делать то, что вы хотите, вам нужно добавить
android:excludeFromRecents="true"
в декларацию для вашего Activity
, Это говорит Android не ставить вашу задачу в список недавних задач.