Android R One-Time Permission Expiration Sometimes Kills Alarms, Jobs, More
UPDATE 2020-09-13: It turns out that the problem listed here is really
an Android Studio problem.
Android R adds one-time permissions to the user experience. The idea is that
the user can grant a runtime permission for a while. I thought that it was
for the current process invocation, but it appears as though you lose the
permission if your app moves to the background for a while as well, where ���a while���
is less than a minute.
Worse, as I found out first from this Stack Overflow question,
we lose a lot more in less than a minute��� at least sometimes.
That question, and the associated entry in the issue tracker,
point out that alarms and jobs get canceled when the one-time permissions
get revoked. I did more testing, based on their sample app, and IMHO
the effect feels a lot like a ���Force Stop���.
Specifically, we can no longer respond to broadcasts registered in the manifest,
even for those that are on the implicit broadcast exception whitelist, such as
ACTION_LOCALE_CHANGED. The only thing that I know of that would explain all those behaviors
is a ���Force Stop���, though it is certainly possible that there is something else
that happens to look similar.
In my light testing, the overall effect was inconsistent. I could get it to happen
reliably the first time I tried a one-time permission for an app installation;
after that it was ���hit or miss���.
Android developers have been dealing with rogue ���Force Stop��� operations for years.
Originally, users could only cause this via an app���s screen in the Settings app.
Then, a few device manufacturers decided to have their own task manager apps do a ���Force Stop���.
Eventually, that led them to have ���Force Stop��� take effect when swiping the task
off the overview screen. But, this is the first time that I can think of that Google
is doing this sort of unexpected ���Force Stop���.
If you have done your own analysis of this problem and can add further evidence
(more than ���me too!���), please contribute to the issue.
Frankly, I suspect that we are doomed, given that it is very late in the Android R
beta cycle. But, maybe we will get lucky, and our contributions can get this cleared
up, or at least documented, by the time Android 11 ships in stable form.


