Yes, that's right. I don't know of any way to tell if the app registered to onClosed. I used the approach of restarting the app immediately in response to a closed notification initially because delaying onClosed until the next time the app starts would require some form of disk storage. However, now with the implementation of the getAll method which requires storing notifications to disk anyway I realize that it is possible now to not restart the app immediately and wait until the next time it runs to call onClosed without any additional storage. This can be done by having javascript pass the list of notifications to native in the call to fireStartupEvents and native can check whether each one exists (by checking if the PendingIntent for the click action exists), and if it doesn't exist then fire onClosed.

This behavior is different from desktop chrome because there the background page persists and so it will always call onClosed immediately after the event happens, but maybe it is preferable to delay it on android?