问题描述: 在Android系统上,当使用NFC功能打开React Native应用时,可能会导致应用在后台中打开两次。这是因为NFC事件触发应用打开后,系统自动创建了一个新的任务,而React Native应用逻辑中并没有对任务的启动进行判断。
为了解决该问题,我们可以利用React Native应用提供的任务管理机制,手动对任务的生命周期进行管理,避免创建多余的任务实例。
在index.js中,首先需要使用AppState API来监听应用当前状态,当应用处于后台时,我们需要手动结束React Native应用的任务:
import { AppState } from 'react-native';
// 监听应用状态
AppState.addEventListener('change', (state) => {
if (state == 'background') {
// 结束React Native应用任务
if (DeviceEventEmitter) {
DeviceEventEmitter.emit('RNExitApp');
}
}
});
其次,在MainActivity.java中,我们需要使用Intent.FLAG_ACTIVITY_CLEAR_TOP标记来保证任务启动时的唯一性:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent launchIntent = getPackageManager().getLaunchIntentForPackage(getPackageName());
launchIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // 添加标记
startActivity(launchIntent);
finish();
}
最后,在AndroidManifest.xml中,我们需要添加启动模式标记以确保在打开应用时重用当前任务:
通过以上步骤,我们就可以成功解决Background NFC opens duplicate react native app on Android问题,避免了多余任务实例的创建和内存占用。