如何确保 MainActivity 只创建一次
How to make sure the MainActivity will be created only once
我有一个 React Native 项目。并且后台有一个服务运行。
当应用不是 运行 时,服务仍然存在,它可能需要在某个时间启动 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 只创建一次?
谢谢。
您很可能已经知道,问题在于您调用了两次 startActivity。我认为如果您能展示调用 startActivity 的代码就太好了。
我刚刚测试过,只要你的启动模式是singleTask或singleTop,OnCreate就不会被调用两次。你可以从这里读到:https://developer.android.com/guide/components/activities/tasks-and-back-stack
调用的函数是onNewintent,如果putExtra为空,确实可以创建NPE
希望对你有所帮助,祝你好运
刚发现问题。我在 startActivity
上的方法断点有效。
第三方 sdk 找不到 属性 接收者,所以它发送一个 startActivity
带有意图标志 FLAG_ACTIVITY_NEW_TASK 的调用 | FLAG_ACTIVITY_CLEAR_TASK,它覆盖了我在 AndroidManefest.xml
中的 singleTask
。
我有一个 React Native 项目。并且后台有一个服务运行。 当应用不是 运行 时,服务仍然存在,它可能需要在某个时间启动 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 只创建一次?
谢谢。
您很可能已经知道,问题在于您调用了两次 startActivity。我认为如果您能展示调用 startActivity 的代码就太好了。
我刚刚测试过,只要你的启动模式是singleTask或singleTop,OnCreate就不会被调用两次。你可以从这里读到:https://developer.android.com/guide/components/activities/tasks-and-back-stack
调用的函数是onNewintent,如果putExtra为空,确实可以创建NPE
希望对你有所帮助,祝你好运
刚发现问题。我在 startActivity
上的方法断点有效。
第三方 sdk 找不到 属性 接收者,所以它发送一个 startActivity
带有意图标志 FLAG_ACTIVITY_NEW_TASK 的调用 | FLAG_ACTIVITY_CLEAR_TASK,它覆盖了我在 AndroidManefest.xml
中的 singleTask
。