【问题标题】:How to make sure the MainActivity will be created only once如何确保 MainActivity 只创建一次
【发布时间】:2020-12-04 07:56:11
【问题描述】:

我有一个反应原生项目。并且有一个服务在后台运行。 当应用程序没有运行时,服务还活着,它可能想在一段时间内启动 MainActivity。我正在使用以下代码启动 MainActivity(我尝试了 noFlag/addFlag/setFlag):

Intent Intent = new Intent(context, MainActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
// intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(key, value);
context.startActivity(intent);

AndroidManifest.xml 声明如下:

<activity
    android:name=".MainActivity"
    android:launchMode="singleTask”>
</activity>

每次 MainActivity 都会被创建两次。第一次我们可以得到额外的值,但第二次它会是空的。

如何确保 MainActivity 只创建一次?

谢谢。

【问题讨论】:

  • 第一次启动应用是怎样的?如果您是第一次从安装程序或 IDE(如 Android Studio)启动应用程序,您可能会看到这个长期存在的令人讨厌的 Android 错误:stackoverflow.com/questions/16283079/…
  • 如果应用已经在运行,您希望发生什么?
  • 就我而言,每次推送都会创建两次活动。由于它是一个 singleTask 活动,我希望它应该只调用 onNewIntent 而不是创建新活动
  • 请终止应用程序(使用设置->应用程序->您的应用程序->强制停止)。然后从主屏幕启动应用程序。然后看看你是否仍然看到这种行为。
  • @DavidWasser 完成。谢谢提醒。

标签: android react-native android-activity launchmode


【解决方案1】:

刚刚发现问题。我在startActivity 上的方法断点起作用了。

第三方sdk找不到属性接收者,所以它发送一个startActivity调用意图标志FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK,它在AndroidManefest.xml 中覆盖了我的singleTask

【讨论】:

    【解决方案2】:

    您很可能已经知道,问题在于您两次调用 startActivity。我认为如果你能展示调用 startActivity 的代码会很可爱。

    我刚刚测试过,只要你有 singleTask 或 singleTop 作为你的启动模式,OnCreate 就不会被调用两次。你可以从这里读到:https://developer.android.com/guide/components/activities/tasks-and-back-stack

    将调用的函数是onNewintent,如果putExtra为空,它确实可以创建一个NPE

    希望对你有帮助,祝你好运

    【讨论】:

    • 感谢您的回复。该服务是第三方供应商提供的推送服务。我还没有找到他们在哪里调用startAcitivity...但是由于我在清单文件中声明了singleTask,我希望它不会被创建两次。
    • 根据我上面贴的文章,不会这样。应该是在 Create 上只调用一次,其余的只会在 OnNewIntent 上调用。请问,您的 onCreate 是否被调用了两次?如果是这样,屏幕是否似乎再次被创建?感谢回复。希望有帮助
    • 是的,我添加了登录onCreate和onNewIntent,我可以看到onNewIntent被调用之后,onCreate又被调用了......同时我在react-native端的组件跑过了componentWillUnmount方法。
    猜你喜欢
    • 2011-01-22
    • 2022-11-02
    • 1970-01-01
    • 2012-06-23
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    相关资源
    最近更新 更多