Unfortunately, that will mean your app can be killed on many smartphones from device makers like xiaomi, Oppo, and huawei, which have aggressive battery optimization. I had this issue on a redmi device where background apps would be killed unless a permanent notification was present.
The WireGuard and tailscale apps work great for me without a persistent notification.
I haven’t tried wireguard. But, I should give them a try and see how it goes in samsung.
The ranking may make it sound like samsung is the worst. But that’s not been the case since android 12. I do not have app reload or app killing issues on this one and find it much better than what I used to experience on miui.
I published an app on the play store that purely relies on a persistent notification + wakelocks to keep the screen active (since the whole point of the app is to keep the screen awake) - Samsung was definitely the worst when it comes to this for my app, as I would receive endless support emails about people with Samsung devices where it would get killed, even when disabling battery optimization for my app. The other manufacturers listed there came up every now and then, but disabling battery optimization generally did the trick for them.
With there being nothing that I could do for my app, I tried disabling compatibility in the play store for a ton of Samsung models, but then I got even more emails about people wondering why it wasn’t available anymore so I re-enabled it, but to this day there’s still (AFAIK) zero things I can do to prevent the app from getting killed on those devices.
I was under the impression that the “Disable battery optimisations” feature was to prevent exactly this. Maybe I misunderstood what it does, but a bunch of apps designed to run in the background tell you to disable this functionality for their app for this very reason.
Some phone’s battery optimization goes beyond the native Android stuff, so even with that step, apps without a notification may get killed.
That is for applications that need access to a LOCAL_SERVICE while not in foreground. That’s like Geolocation or screen orientation. VPN is not one of those. You can kill the foreground application from the recent apps by sliding up.
No real VPN app needs to have an application window and a background service (same thread) running to provide a VPN. If it does, it is doing something else not related to VPN.
If you want to add a pause button, applications can add custom tiles.