有没有一种方法可以避免原生脚本活动生命周期事件被多次触发

时间:2019-07-04 07:38:17

标签: activity-lifecycle nativescript-angular

我尝试使用以下指南在NativeScript android应用中处理android生命周期: https://docs.nativescript.org/core-concepts/application-lifecycle#android-activity-events

当我使用“后退”按钮退出应用程序,然后使用最近的按钮重新打开应用程序时,所有生命周期事件都会触发两次。如果我再次执行此操作,则所有生命周期事件都会触发三次。

这是一个显示问题的游乐场简单应用程序: https://play.nativescript.org/?template=play-ng&id=y9RucD

使用后退按钮,然后使用最近使用的按钮恢复...

1 个答案:

答案 0 :(得分:0)

您需要在destroy事件上删除侦听器。在使用android.on分配事件侦听器时,还需要使用android.off

您可以找到完整的示例herehere。我还更新了您的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向您展示了代码,您也可以为其他事件分配/取消分配。