一个android:nohistory标志被忽略了

时间:2015-09-30 11:02:52

标签: android android-intent android-activity android-lifecycle android-task

以下是该方案:

  1. 用户使用活动#1来安排闹钟(使用android AlarmManager服务),然后返回主屏幕。活动#1保持堆叠状态。

  2. AlarmReciever的{​​{1}}按计划调用:

    onReceived()
  3. 活动#2(@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); } )成功启动。

    Activity2

    }

  4. 用户点击按钮(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活动#2。

  5. 系统按预期移回主屏幕,活动#2仍然在堆栈(当用户点击Recent Button时显示)
  6. 请注意,除了为意图设置finish()标志外,还在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> 是必需的,因为活动#2是从Intent.FLAG_ACTIVITY_NEW_TASK而非其他活动开始的。

1 个答案:

答案 0 :(得分:0)

一旦Activity不再可见,NO_HISTORY标志只会阻止此Activity出现在任务堆栈中。在您的情况下,如果您在显示Activity2时按住HOME,您会看到Android立即在该活动上调用finish()onDestroy()(这不是通常的行为时任务被放入后台)。

要做你想做的事,你需要添加

    android:excludeFromRecents="true"

Activity的清单条目。这告诉Android不要将你的任务放在最近的任务列表中。