v9.66beta0..3: improve Wear OS tile performance

Please share:

Please test and report any issues

I give this version now into the hands of beta testers. You are the first to enjoy these new features, but in return for the early access I ask you to report any problems you find:

  • crashes, hangs, regression issues (especially if they are reproducible)
  • operation problems (unexpected behaviour, mistakes)
  • grammar errors in the English texts (other languages are coming later)
  • layout color / visibility / alignment problems (it helps if you include a screenshot)
  • illogical or missing functionality
  • further improvement suggestions

Thank you for your help!

See: become a beta tester

Beta 1

Aim to improve the Bubble Cloud tile performance:

  • Removed unnecessary tile updates (track if anything related to the tile has changed since last update)
  • Defer tile update to avoid lag when accessing tiles (adjust delay under Watch:”Expert settings” or Phone:”More options”)

Beta 2

  • Error message instead of crash on Mobvoi watches with non-standard voice recognition (e.g. TicWatch Pro)
  • Update toggle and tasker bubbles in the tile folder
  • Bubbles were not growing in folders even if “lock bubble size/location” was off
  • Animate (“blink”) bubbles in folder when tapped

Tiles – behind the scenes

Wear OS triggers tiles to be redrawn every time we access them. This is not a problem for simple tiles, but you can create very complex tiles with Bubble Clouds, which can strain the system so much that you will see a visible jump in the movement of the tile as you scroll between the tiles.

On demand updates

Staring with version 9.66.1 Bubble Cloud will keep track of any changes affecting the tile (appearance or contents), and only initiate the update if it is necessary.

Cause of the lag

Bubble Cloud prepares the tile in a background thread, which does not affect the animation, but then it hands the remote view to the OS which draws the tile in the same process where the animation happens and if the view is complex enough there can be a noticeable lag.

There is nothing we can do to change this behaviour in Wear OS (Google would have to improve their implementation – this is probably the reason there is no official Tiles API yet). What we can do is not to provide the new remote view to the system, so it would not try to redraw it during the animation. This is what this setting is for.

Delayed update

The default delay is 2 seconds, which is short enough so if the tile needs to be drawn from scratch it will appear after just a short pause, but long enough to eliminate any lag no matter how slowly you advance the tiles.  I encourage you to experiment with this setting. A very short delay of 0.2-0.4 seconds might also do the trick so the update happens during the fraction of a second you stop between tiles. I would not recommend setting it much higher than 2 seconds, since that introduces a long delay while drawing tiles the first time.

Background update

Problem is, the system kicks my tile provider routines out of memory a few seconds after the user goes back to the watch face, so we cannot update the bubbles in the background. Instead, the next time the user opens the tiles, my app will realize there were changes in the meantime and it will attempt to update the tile. If this happens during scrolling the user will still see lag. This is why I recommend setting a 1-2 seconds delay. If the user quickly swipes to another tile, the Bubble Cloud tile will not update and the user won’t see any lag. But if the user stops to look at the tile, he/she will see the information refresh within a second or two.  This whole foreground update does not happen if the data is all up to date, or if my tile provider routines are still available in RAM so they can carry out the update in the background (when the tile is not showing)

Author: greg

the dev