rust-windowing / rust-windowing/winit
Cross-platform consistency for `ApplicationHandler::suspended/resumed()`
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 6.2k
- Forks
- 1.3k
- Avg merge
- 2d 19h
- Merged PRs (30d)
- 9
Description
Unfortunately the behavior between Android, iOS and Web doesn't match exactly, so this will require some research and figuring out exactly how we want to expose this to the user.
Web
Web currently implements this via pagehide and pageshow. Which for suspended() means the application is being navigated away from and is being stored in the B/F Cache and for resumed() means that the page has been restored.
Its important to note that between suspended() and restored() no user code can be executed and getting restored() isn't actually promised.
There is also the Page Lifecycle API, currently only implemented in Chrome, which lets us also detect if the application was frozen by the browser.
iOS
@madsmtm please feel free to work out this section and correct me.
applicationDidEnterBackground could be used to detect when iOS is telling the application to stop doing anything. This doesn't mean that any code execution will be suspended immediately but "probably soon".
This however is currently not implemented correctly and instead iOS will call ApplicationHandler::suspended() when the application is running in the background via applicationWillResignActive, which should probably be WindowEvent::Focused(false) instead.
Presumably its also guaranteed that the application will be woken up before being actually closed (?).
Android
@MarijnS95 your input would be greatly appreciated here.
Android does currently not implement ApplicationHandler::suspended/resumed()
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the ApplicationHandler::suspended/resumed() entry points and compare the Web pagehide/pageshow behavior with the iOS applicationDidEnterBackground and applicationWillResignActive hooks. Research the Android lifecycle behavior and determine how these platform events should map to the user-facing API. Done means the cross-platform semantics and implementation scope are agreed, including the distinction from WindowEvent::Focused(false).
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, ios, rust
- Domain
- mobile-dev, web-dev
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100