我正在开发一个本机应用程序。我目前正在android中进行测试,看来当应用失去焦点,然后再次按下启动图标时,无需调用componentWillUnmount即可重新创建组件。
我可以用一个简单的react-native应用程序重新创建它:
react-native init MultipleComponents
并将以下内容添加到App类:
componentDidMount() {
clearInterval(this._interval);
this._interval = setInterval(() => {
console.log("Timeout");
}, 5000);
}
componentWillUnmount() {
console.log("Timeout");
clearInterval(this._interval);
}
完成此操作后,即可使用:
react-native run-android
然后,在模拟器上,您可以通过按下主屏幕按钮并重新启动应用程序来运行多个计时器。运行多个计时器显然不理想。
请注意,未调用componentWillUnmount。
我想念什么吗?该如何处理?
答案 0 :(得分:1)
当应用程序不在前台时,JavaScript线程就消失了,因此在您的应用程序失去焦点之后就不会执行任何React代码,这包括componentWillUnmount和其他生命周期方法。
但是,如果最终在按下图标时遇到多个计时器,则应该检查AndroidManifest.xml文件中的launchMode。如果launchMode的值为 standard 或 singleTop ,则您的应用可以存在多个实例。如果将设置更改为 singleInstance 或 singleTask ,则将始终只有一个实例。
android / app / src / AndroidManifest.xml:
<manifest>
<application>
<activity
android:launchMode="singleTask">
</application>
</manifest>