Android 如何正确地将活动与新任务联系起来?

Android 如何正确地将活动与新任务联系起来?,android,android-intent,android-task,Android,Android Intent,Android Task,我正在申请报警。我有3个活动:Main,Alarm,Game 它们在舱单中声明: <activity android:name=".MainActivity" android:windowSoftInputMode="adjustResize" android:screenOrientation="sensorPortrait" > <intent-filter> &l

我正在申请报警。我有3个活动:
Main
Alarm
Game

它们在舱单中声明:

<activity
        android:name=".MainActivity"
        android:windowSoftInputMode="adjustResize"
        android:screenOrientation="sensorPortrait"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
</activity>
<activity
        android:name=".Alarm"
        android:excludeFromRecents="true"
        android:launchMode="singleTask"
        android:screenOrientation="sensorPortrait"
        />
<activity
        android:name=".Game"
        android:excludeFromRecents="true"
        android:label="@string/search_word"
        android:launchMode="singleTask"
        android:screenOrientation="sensorPortrait"
        />
或者从“游戏的背面”开始:

if (!test) {
     Intent i = new Intent(mContext, NotificationActivity.class);
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     startActivity(i);
}
finish();
游戏
活动以类似方式从报警活动调用:

i = new Intent(this, BubblePopActivity.class);
i.putExtras(b);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
没有对
Main
活动的内部调用

@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    boolean serviceIsRunning = isMyServiceRunning(AlarmService.class);
    if (serviceIsRunning) {
      boolean alarmRings = RingingAlarmUtil.getRingingAlarm(this).isExpired();
      if (!alarmRings) {
        Intent i = new Intent(this, NotificationActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(i);
        finish();
      }
    }
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    //normal launch staff
}
我努力实现的行为:

1) 活动
警报
游戏
应显示在锁屏上,既可以解锁,也可以用pin、图形等锁定。它与 活动中减少的标志,需要在意图中标记新任务

super.onCreate(savedInstanceState);
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);
        setContentView(R.layout.activity_bgame);
2) 后退按钮应从
游戏
活动引导至
报警
活动 3) 如果按下
主页
,而
报警
游戏
活动位于堆栈顶部,则只要这些活动未通过应用程序逻辑完成,启动器图标应重新打开它们,而非主。
1)和2)工作流畅,3)偶尔工作。有时它会返回到
报警
活动的
游戏。看起来,如果这些活动由于缺乏资源而被系统终止,则启动器图标将导致
Main
活动。

如何实现所需的逻辑?

我添加了sharede首选项常量。当我启动主活动时,我检查用户是否错过了报警,然后正常启动,否则启动报警活动

@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    boolean serviceIsRunning = isMyServiceRunning(AlarmService.class);
    if (serviceIsRunning) {
      boolean alarmRings = RingingAlarmUtil.getRingingAlarm(this).isExpired();
      if (!alarmRings) {
        Intent i = new Intent(this, NotificationActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(i);
        finish();
      }
    }
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    //normal launch staff
}