1

这是场景:

  1. 用户使用 Activity#1 安排闹钟(使用 androidAlarmManager服务),然后返回主屏幕。Activity#1 保留在堆栈中。

  2. AlarmRecieveronReceived()按计划调用:

    @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);
    }
    
  3. 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();
    
                    }
                }
        );
    
    }
    

    }

  4. 用户单击Activity#2的按钮 ( R.id.dismiss_button) 。finish()

  5. 系统按预期返回主屏幕,但 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活动而不是另一个活动开始的。

4

1 回答 1

3

NO_HISTORY 标志只是防止它在不再可见Activity时出现在任务堆栈中。Activity在您的情况下,如果您在显示时按 HOME Activity2,您会立即看到 Android 调用finish()onDestroy()该活动(这不是将任务置于后台时的常见行为)。

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

    android:excludeFromRecents="true"

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

于 2015-10-02T16:26:36.240 回答