【发布时间】:2015-12-28 03:25:44
【问题描述】:
场景如下:
用户使用 Activity#1 安排闹钟(使用 android
AlarmManager服务),然后返回主屏幕。 Activity#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); } -
Activity#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()Activity#2。- 系统按预期返回主屏幕,但 Activity#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 标志是必需的,因为 Activity#2 是从 AlarmReceiver 而不是另一个 Activity 启动的。
【问题讨论】:
标签: android android-intent android-activity android-lifecycle android-task