【问题标题】:Force activity to call onCreate() using startActivity when the launchMode is singleTask当 launchMode 为 singleTask 时,强制活动使用 startActivity 调用 onCreate()
【发布时间】:2018-11-03 21:43:20
【问题描述】:

我的活动启动模式设置为android:launchMode="singleTask"

当我调用 startActivity() 从另一个活动启动它时,它会将它从上一个状态带到顶部。

场景:

活动 A 启动活动 B

Activity B 启动 Activity A

Activity A 带有旧数据

我用什么标志来强制它开始干净并调用onCreate()

知道我必须使用android:launchMode="singleTask"来维护 常规申请流程,无法切换到android:launchMode="singleTop"

谢谢

编辑(1):

launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

连同android:launchMode="singleTask"

它解决了我要问的问题,但它造成了一个最糟糕的问题

现在,当我完成活动 A(由活动 A 启动的活动 B 启动)时,我发现自己最终到达了我正在使用的最后一个应用程序,它应该登陆到活动 B。

【问题讨论】:

  • 您为什么不尝试使用startActivityForResult 并在onActivityResult() 上使用A 上B 的详细信息
  • @IsaiahJ 我清楚地提到我必须坚持使用 singleTask 并且不能切换到 SingleTop 因为它破坏了预期的流程。
  • @aminography 我想过,但是有一种情况是活动 B 重新启动活动 A 保持并需要保持其旧状态,这就是我使用 singleTask 的原因,我需要维护这种情况并为问题中提到的场景找到解决方案。
  • 哦,好吧,抱歉,但 imo 并不是很清楚。我提出了一些修改建议。

标签: java android android-activity


【解决方案1】:

尝试使用onNewIntent 知道Activity A 重新启动。因此,当启动模式为singleTask 时,您应该在onCreateonNewIntent 中进行初始化。

活动 A:

public class ActivityA extends AppCompatActivity {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        init();
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        init();
    }

    private void init(){
        // do initialization
    }

}

【讨论】:

  • 我想过,但是有一个场景,活动 B 重新启动活动 A 保持并需要保持其旧状态,这就是我使用 singleTask 的原因,我需要维护这个场景并找到问题中提到的场景的解决方案。
  • 我做了一些改变。我希望它有所帮助。
猜你喜欢
  • 2014-11-04
  • 2021-07-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 2020-02-01
相关资源
最近更新 更多