@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//XXXXX
}
//onUserInteraction这个方法,用户操作屏幕就会有反馈
@Override
public void onUserInteraction() {
super.onUserInteraction();
//这个方法,抛出一个函数名,和要传的参数
getReactInstanceManager().getCurrentReactContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("起个名字", true);
}
在Android的active里操作如上
在rn中的操作如下
const [userInteractionLastTime, setUserInteractionLastTime] = useState(moment().unix());
const [date, updateDate] = useState(moment().unix()); // 时钟
const doUpdateDate = useCallback(() => updateDate(moment().unix()), []);
useEffect(() => {
const timer = setInterval(doUpdateDate, 1000);//data 每秒更新一次
return () => clearInterval(timer);
}, [doUpdateDate]);
useEffect(() => {
// DeviceEventEmitter.addListener 接收的方法
const userInteraction = DeviceEventEmitter.addListener('同一个函数名', (e) => {
//这里写操作XXXXX,点击屏幕以后先做什么?再计时去走不活跃的操作
setUserInteractionLastTime(moment().unix());
});
return () => userInteraction.remove();//销毁
}, [依赖]);
useEffect(() => {
if (date - userInteractionLastTime >n * 60) {
// 用户不活跃的操作
} else {
//...
}
}, [依赖]);
项目中有用到当用户不活跃的时候,屏幕亮度降到最低,接触rn也才一个月,Android也是,解决这个问题也绕过远路,各种查资料,开始的时候逻辑写在java里,操作rn的时候还用到防抖,在大神指导下都改精简了,分享出来供大家参考,也供我以后查阅