Nor*_*S.M 7 android react-native react-native-android
以下是重现错误的过程.
在我的项目v0.29中发生,但我刚刚在v0.33上测试了init,它的行为方式相同.
当应用程序运行时,按下设备/模拟器的主页按钮并通过单击桌面图标打开应用程序,这里发生的是应用程序重新启动安装组件而没有先卸载它,导致多个实例如果你多次这样做,app会运行.
然后,如果您按下设备后退按钮,它将终止,因此卸载顶级实例,让您使用前一个实例,直到最后一个卸载并且它将转到桌面.
在此之后如果您退出应用程序,就像您最初按下主页按钮并通过单击桌面图标打开它,这将不会重新启动应用程序再次安装它,从这一刻开始正确行事.同样,如果应用程序首次启动,则使用后退按钮退出,之后主页按钮将表现正常.
同样,如果你实现像react-native-activity-android这样的软件包,以避免在按下后退按钮时杀死应用程序,你最终会运行多个应用程序.
我不知道android,当应用程序被杀死时发生了什么,如果你使用home按钮将应用程序发送到后台它可以正常工作?
任何想法如何解决这个问题,所以将应用程序发送到后台并重新打开它不会挂载多个应用程序?
如果我需要在后台运行应用程序以进行位置/通知,假设我无法解决此问题,但我可以处理事件侦听器,因此它们不会多次执行.多个应用程序同时安装的性能/内存有多糟糕?
谢谢
不幸的是,这个问题的最佳答案因为仅链接而被删除,所以我在这里放回信息.
此错误是由于React Native为每个应用程序创建了多个活动,这导致多个根组件同时运行.
对大多数人来说似乎有效的解决方案是设置launchMode为singleInstancein AndroidManifest.xml,所以这样的事情:
<manifest>
...
<application>
...
<activity ... android:launchMode="singleInstance">
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
更多信息:
https://github.com/facebook/react-native/issues/10266
https://github.com/facebook/react-native/issues/7079
事实证明,使用 BackAndroid 并false从后按处理程序返回会导致组件卸载。当应用程序返回前台时,需要重建这些组件。
我尝试添加android:launchMode="singleTask"到活动中AndroidManifest.xml但无济于事。我的解决方案是使用react-native-activity-android,将应用程序放在后台ActivityAndroid.moveTaskToBack()适当且从不return false。然后你的处理程序将看起来像这样:
handleBackPress() {
if (this.navigator) {
if (this.navigator.getCurrentRoutes().length > 1) {
this.navigator.pop();
} else {
ActivityAndroid.moveTaskToBack();
}
}
return true;
};
Run Code Online (Sandbox Code Playgroud)
注意:该插件的作者尚未更新它以兼容 React Native 0.29.0 或更高版本。在撰写本文时,我修复此问题的拉取请求正在等待处理。
| 归档时间: |
|
| 查看次数: |
2935 次 |
| 最近记录: |