這裏的情景:一個Android:nohistory標誌被忽略
用戶使用活動#1調度報警(使用了Android
AlarmManager
服務),並返回到主屏幕。活動#1保持堆疊狀態。AlarmReciever
的onReceived()
按計劃被稱爲:@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
而不是其他活動。