Android Activity启动时使用 FLAG_ACTIVITY_NEW_TASK 不使用 FLAG_ACTIVITY_CLEAR_TASK 引起的设备白屏

发布时间 2023-09-13 12:08:57作者: Arcturis

Activity启动模式 除了能指定falg 还可以指定 launchmode 

每一个都会引起不必要你难以预料的bug,两个一起混合使用更会导致问题难以排查

笔者在做一个视频应用时就遇到了 播放视频白屏问题

原因就是 在service里拉起播放activity  必须要使用 FLAG_ACTIVITY_NEW_TASK 但是却没有使用 FLAG_ACTIVITY_CLEAR_TASK

所以我们在使用  FLAG_ACTIVITY_NEW_TASK 一般要配合  FLAG_ACTIVITY_CLEAR_TASK 使用如若不 将会导致如下

来自 chatgpt

 

  1. 新的任务栈:活动将在一个新的任务栈中启动,而不是当前任务栈。这意味着在新的任务栈中活动是独立的,并且不与当前任务栈中的活动共享。用户可以通过任务切换器(如最近使用的应用列表)在不同的任务栈之间切换。
  2. 任务栈中的活动:如果在新的任务栈中已经存在活动实例,则不会创建新的实例。相反,将会切换到现有的活动实例,并且该实例将成为新任务栈的顶部活动。
  3. 返回栈行为:当从新的任务栈返回到之前的任务栈时,新任务栈将保留其活动顺序,并且返回到新任务栈之前的顶部活动。这意味着之前的任务栈中的活动将保持不变,而新任务栈的活动将被销毁。

总结来说,通过只使用FLAG_ACTIVITY_NEW_TASK标志启动活动,新的活动将在一个新的任务栈中启动,并且不会清除现有任务栈中的活动。这可能会导致用户体验上的不一致或混乱,因为返回栈行为可能不符合预期。为了避免这种情况,您可能需要考虑使用FLAG_ACTIVITY_CLEAR_TASK标志来清除现有任务栈中的活动,并确保新的任务栈中只有期望的活动实例。