Comments (2)
Hi, thanks for your feedback - this really does make the plugin better, so keep it coming!
I suggest adding a BroadcastStream
, so in addition to updates
there would be updatesBroadcast
and we add the update to both streams if they have listeners. That way you can choose, and understand the risk of missing updates if you're not listening. Changing the type of the updates
field would be a breaking change and for most users is unlikely to be an improvement. What do you think?
I'll add unregisterCallback
.
from background_downloader.
Well broadcast streams don't buffer the events, so it would not degrade performance too much if its not used. In contrast the updates
stream would buffer (if someone just uses the broadcast).
Make it possible to close the updates stream controller?
An easier solution would be to allow to close the updates stream controller. Currently destroy
does this. That does other things too, I haven't checked what exactly, but it is possible its the right way for me currently (as I want to use the downloader on specific screens only). If those other cleanups don't make sense, then a dispose()
method may be a good candidate which closes the streamcontroller and creates a new one). That may cleanup callbacks too. My usecase does not need a broadcast tbh.
If you would go with the broadcast:
Honestly I would deprecate the updates
getter and replace it by an updates()
method (or something), which can take params. The updates
getter could call this method in a backward compatible way. The method could have an asBroadcast
bool named parameter.
That would help with other things, that maybe also problematic (maybe not). When I was experimenting with resumeFromBackground()
I couldn't find a good spot to call it when using the updates
stream and bloc. Well, I'm still not sure what that method does exactly, but it dispatches updates, so you need to listen for those updates beforehand (as stated in the docs). Eg:
await resumeFromBackground();
await emit.forEach(updates, (update) {
// too late (or maybe not because of buffering; but if you use broadcast, then too late for sure)
});
await resumeFromBackground();
// this won't run as `await emit.forEach` will hold the execution until the stream or bloc is closed
For this the updates()
method could take an onListen
callback, or just something specific param which calls resumeFromBackground
in the onListen
method of the stream controller and it wouldn't depend on the buffering.
Just writing down my ideas, maybe they don't make sense, but these are the things I was struggling a little bit.
from background_downloader.
Related Issues (20)
- [Android] notification icon HOT 3
- Large attachment uploading takes a while HOT 2
- Build failure with `background_downloader` due to missing Kotlin plugin HOT 3
- Monthly issue metrics report for opened issues and prs
- Monthly issue metrics report for closed issues and prs
- Receive status update in background HOT 6
- Lack of Docs for `downloadBatch` HOT 1
- Upload tasks get randomly restarted on a slow Android device HOT 4
- Duplicate Task when uploading an image HOT 6
- Could not find org.jetbrains.kotlin:kotlin-serialization-compiler-plugin-embeddable:1.7.10. HOT 3
- Failed to open file on Android java.lang.IllegalArgumentException: Failed to find configured root that contains: HOT 4
- Android build is failing due to missing Kotlin lib HOT 1
- IOS download error HOT 6
- kotlin-serialization-compiler-plugin-embeddable:1.7.10. HOT 1
- Monthly issue metrics report for opened issues and prs
- Monthly issue metrics report for closed issues and prs
- when use FileDownloader().download() on IOS devices, it throws Exception "could not enqueue DownloadTask"
- downloadBatch can't be cancelled mid download
- ParallelDownloadTask: All Chunks Cancelled Unexpectedly HOT 5
- can't be cancelled mid download all cancel api HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from background_downloader.