Description
Bug Report
Capacitor Version
Latest Dependencies:
@capacitor/cli: 4.6.2
@capacitor/core: 4.6.2
@capacitor/android: 4.6.2
@capacitor/ios: 4.6.2
Installed Dependencies:
@capacitor/cli: 4.6.2
@capacitor/core: 4.6.2
@capacitor/android: 4.6.2
@capacitor/ios: 4.6.2
Platform(s)
- Android
Current Behavior
I'm maintaining a capacitor plugin that emits events for listeners (https://capacitorjs.com/docs/plugins/android#plugin-events). It uses a native Android & iOS package that starts a foreground service (and on Android, adds a notification to status bar). While the app is in the foreground or background, the native plugin code calls notifyListeners, and the javascript listener callback is run as expected.
The issue is that on Android when the app is swiped away, the Android plugin code continues to run as desired due to the foreground service and status bar notification and calls notifyListeners
, but the javascript listener callback is never called. In logcat after the AppDestroyed lifecycle event is seen, the Android `"Notifying listeners for event X" is still being output, but the javascript listener callback is never reached (nor is there a "no listeners found for event X").
Expected Behavior
If the android plugin code is running and successfully calls notifyListeners
, the javascript listener callback (via addListener
) is expected to run.
Code Reproduction
I will create a sample application and update here, but wanted to see if it is a known issue in the meantime
The key components would be on Android to call
startForeground
and setup a notification like so https://medium.com/@engineermuse/foreground-services-in-android-e131a863a33d
emit the listener event
JSObject ret = new JSObject();
ret.put("value", "some value");
notifyListeners("myPluginEvent", ret);
and on the javascript side setup a listener callback
import { MyPlugin } from 'my-plugin';
MyPlugin.addListener('myPluginEvent', (info: any) => {
console.log('myPluginEvent was fired');
});
Notice in the foreground and background the js listener will fire, but on swiping away the app, the Android code will continue to run and notify listeners but javascript listener doesn't stay alive.
Update: https://github.com/corypisano/capacitor-listeners-issue
Other Technical Details
npm --version
output: 8.1.0
node --version
output: v16.13.0
pod --version
output (iOS issues only):