Skip to content

GitLab

  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • briar briar
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 780
    • Issues 780
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 13
    • Merge requests 13
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • briar
  • briarbriar
  • Issues
  • #1994
Closed
Open
Created Apr 08, 2021 by akwizgran@akwizgranOwner

App goes into background spontaneously when memory is low

On the Galaxy Nexus (Android 4.3), Briar sometimes goes into the background spontaneously when memory is low.

This seems to happen because the app's importance is downgraded from IMPORTANCE_FOREGROUND to IMPORTANCE_VISIBLE when the app's showing a system dialog (in my case it was the Bluetooth discoverability dialog). BriarApplicationImpl#isRunningInBackground() considers anything other than IMPORTANCE_FOREGROUND to be background, so it allows BriarService to hide the UI to save memory.

Fixing this will require some care. When Briar's actually running in the background on this device it has an importance of IMPORTANCE_PERCEPTIBLE_PRE_26 (perhaps it's treated as perceptible because of the foreground service). But on other devices it might plausibly have IMPORTANCE_FOREGROUND_SERVICE (added in API 23) or IMPORTANCE_PERCEPTIBLE (added in API 26). Presumably new constants may be added in future versions.

The constants seem to be ordered, with lower values being more important:

  • IMPORTANCE_FOREGROUND = 100
  • IMPORTANCE_FOREGROUND_SERVICE = 125
  • IMPORTANCE_PERCEPTIBLE_PRE_26 = 130
  • IMPORTANCE_VISIBLE = 200
  • IMPORTANCE_PERCEPTIBLE = 230

Unfortunately there's no cutoff we can choose such that the values for "running in the foreground, maybe with a system dialog" are on one side while the values for "running in the background with a foreground service" are on the other side.

I suspect there's an Android bug here: an app that would have IMPORTANCE_PERCEPTIBLE_PRE_26 when running in the background shouldn't be less important when it's running in the foreground but showing a system dialog. If I'm right and we can find out when the bug was fixed, maybe we can use some version-aware logic to work around this.

Assignee
Assign to
Time tracking