-
-
Notifications
You must be signed in to change notification settings - Fork 695
Advanced topics
When an upload fails, Android Upload Service will automatically retry it if you have invoked setMaxRetries
on the upload request object. To optimize network usage, every retry will be made some time after each failure. If a subsequent failure happens, the next attempt will be furtherly delayed, and so on. In this way if your network drops at some time, you will not experience a burst in subsequent upload attempts, which drains your battery.
Backoff algorithm is ruled by the following constants, which you can tune as you wish starting from release 3.0:
-
UploadService.INITIAL_RETRY_WAIT_TIME
: sets the time to wait in milliseconds before the next attempt when an upload fails for the first time. From the second time onwards, this value will be multiplied byUploadService.BACKOFF_MULTIPLIER
to get the time to wait before the next attempt. -
UploadService.BACKOFF_MULTIPLIER
: sets the backoff timer multiplier. By default is set to 10, so every time that an upload fails, the time to wait between retries will be multiplied by 10. E.g. if the first time the wait time is 1s, the second time it will be 10s and the third time it will be 100s. -
UploadService.MAX_RETRY_WAIT_TIME
: Sets the maximum time to wait in milliseconds between two upload attempts. This is useful because every time an upload fails, the wait time gets multiplied byUploadService.BACKOFF_MULTIPLIER
and it's not convenient that the value grows indefinitely.
Refer to the code for further reference.
By default, UploadService gets initialized with a pool of threads equal to the number of processors on your device, as you can see here. So, for example, if you have a quad-core device, the number of maximum parallel uploads will be 4. You can tune that by setting:
UploadService.UPLOAD_POOL_SIZE
in your Application initializer.
For security reasons, the library doesn't accept self-signed certificates by default when using HTTPS connections, but you can enable them if you need it. Read this.
Android Upload Service tries its best to upload files. You can in fact set the maximum number of automatic upload retries before notifying an error, by calling the setMaxRetries
on the upload request. Since network on mobile devices is unreliable and it may also happen that your server is not reachable when you try to upload something, it may happen that your files are not uploaded even after 100 automatic retries (which is a bad practice btw 😄). So, what I suggest you to do is to keep a reference to the uploadID and the upload request object somewhere in your code, so you can trigger upload again by calling the startUpload
method on the request object when certain conditions (e.g. server is reachable again) are met. How to properly implement that behaviour for your specific scenario is up to you. If you can't figure it out how to do it and you need some further help, you're welcome, but that's called consulting 😃 .
If you want to start uploads or retry them based on the remote server's reachability status, Android Host Monitor may be useful to you in combination with this library.
By default, the library uses the HttpURLConnection
stack to perform uploads. However, starting from release 2.1+, you can use also OkHttp
(check Setup wiki page) or provide your own implementation! All you need to do is implement HttpStack and HttpConnection interfaces. Refer to the default implementation for an example on how it's done. You can also see how to create a completely new project which provides a custom HTTP stack by looking at how the uploadservice-okhttp
module is made.