我尝试使用以下指南在NativeScript android应用中处理android生命周期: https://docs.nativescript.org/core-concepts/application-lifecycle#android-activity-events
当我使用“后退”按钮退出应用程序,然后使用最近的按钮重新打开应用程序时,所有生命周期事件都会触发两次。如果我再次执行此操作,则所有生命周期事件都会触发三次。
这是一个显示问题的游乐场简单应用程序: https://play.nativescript.org/?template=play-ng&id=y9RucD
使用后退按钮,然后使用最近使用的按钮恢复...
答案 0 :(得分:0)
您需要在destroy事件上删除侦听器。在使用android.on
分配事件侦听器时,还需要使用android.off
。
您可以找到完整的示例here和here。我还更新了您的playground。
在您的ngOnInit函数中,我正在将android.on分配给侦听器,例如
this.launchListenerCB = (args) => {
console.log(">>>>>>> resumeEvent Event");
if (args.android) {
// For Android applications, args.android is an android.content.Intent class.
console.log("resumeEvent Android application with the following intent: " + args.android + ".");
}
};
appOn(resumeEvent, this.launchListenerCB);
在exitEvent上,我正在取消订阅所有侦听器。
this.exitListenerCB = (eventData: any) => {
this.unsubscribeAll();
}
appOn(exitEvent, this.exitListenerCB);
private unsubscribeAll(): void {
// console.log("unsubscribeAll launchListenerCB:", !!launchListenerCB)
appOff(resumeEvent, this.launchListenerCB); // HERE
// appOff(suspendEvent, this.suspendListenerCB);
// appOff(resumeEvent, this.resumeListenerCB);
// appOff(lowMemoryEvent, this.lowMemoryListenerCB);
// appOff(exitEvent, this.exitListenerCB);
}
在您的操场上,我刚刚使用ResumeEvent向您展示了代码,您也可以为其他事件分配/取消分配。