Вот сценарий:Андроид: nohistory флаг игнорируется
Пользователь использует активность # 1, чтобы назначить сигнал (с помощью андроида
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 остается на стеке (появляется, когда пользователь нажимает на Recent Button)
Пожалуйста, обратите внимание, что в дополнение к установке 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
, а не другой деятельностью.