mirror of
https://github.com/androidx/media.git
synced 2025-05-11 09:39:52 +08:00
Make download progress updates thread safe
Issue: #5978 PiperOrigin-RevId: 308076851
This commit is contained in:
parent
25f17acd21
commit
63db847bf6
@ -734,7 +734,7 @@ public final class DownloadManager {
|
|||||||
break;
|
break;
|
||||||
case MSG_CONTENT_LENGTH_CHANGED:
|
case MSG_CONTENT_LENGTH_CHANGED:
|
||||||
task = (Task) message.obj;
|
task = (Task) message.obj;
|
||||||
onContentLengthChanged(task);
|
onContentLengthChanged(task, Util.toLong(message.arg1, message.arg2));
|
||||||
return; // No need to post back to mainHandler.
|
return; // No need to post back to mainHandler.
|
||||||
case MSG_UPDATE_PROGRESS:
|
case MSG_UPDATE_PROGRESS:
|
||||||
updateProgress();
|
updateProgress();
|
||||||
@ -1030,9 +1030,8 @@ public final class DownloadManager {
|
|||||||
|
|
||||||
// Task event processing.
|
// Task event processing.
|
||||||
|
|
||||||
private void onContentLengthChanged(Task task) {
|
private void onContentLengthChanged(Task task, long contentLength) {
|
||||||
String downloadId = task.request.id;
|
String downloadId = task.request.id;
|
||||||
long contentLength = task.contentLength;
|
|
||||||
Download download =
|
Download download =
|
||||||
Assertions.checkNotNull(getDownload(downloadId, /* loadFromIndex= */ false));
|
Assertions.checkNotNull(getDownload(downloadId, /* loadFromIndex= */ false));
|
||||||
if (contentLength == download.contentLength || contentLength == C.LENGTH_UNSET) {
|
if (contentLength == download.contentLength || contentLength == C.LENGTH_UNSET) {
|
||||||
@ -1325,7 +1324,13 @@ public final class DownloadManager {
|
|||||||
this.contentLength = contentLength;
|
this.contentLength = contentLength;
|
||||||
@Nullable Handler internalHandler = this.internalHandler;
|
@Nullable Handler internalHandler = this.internalHandler;
|
||||||
if (internalHandler != null) {
|
if (internalHandler != null) {
|
||||||
internalHandler.obtainMessage(MSG_CONTENT_LENGTH_CHANGED, this).sendToTarget();
|
internalHandler
|
||||||
|
.obtainMessage(
|
||||||
|
MSG_CONTENT_LENGTH_CHANGED,
|
||||||
|
(int) (contentLength >> 32),
|
||||||
|
(int) contentLength,
|
||||||
|
this)
|
||||||
|
.sendToTarget();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,8 @@ import com.google.android.exoplayer2.C;
|
|||||||
public class DownloadProgress {
|
public class DownloadProgress {
|
||||||
|
|
||||||
/** The number of bytes that have been downloaded. */
|
/** The number of bytes that have been downloaded. */
|
||||||
public long bytesDownloaded;
|
public volatile long bytesDownloaded;
|
||||||
|
|
||||||
/** The percentage that has been downloaded, or {@link C#PERCENTAGE_UNSET} if unknown. */
|
/** The percentage that has been downloaded, or {@link C#PERCENTAGE_UNSET} if unknown. */
|
||||||
public float percentDownloaded;
|
public volatile float percentDownloaded;
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,10 @@ public interface Downloader {
|
|||||||
/**
|
/**
|
||||||
* Called when progress is made during a download operation.
|
* Called when progress is made during a download operation.
|
||||||
*
|
*
|
||||||
|
* <p>May be called directly from {@link #download}, or from any other thread used by the
|
||||||
|
* downloader. In all cases, {@link #download} is guaranteed not to return until after the last
|
||||||
|
* call to {@link #onProgress} has finished executing.
|
||||||
|
*
|
||||||
* @param contentLength The length of the content in bytes, or {@link C#LENGTH_UNSET} if
|
* @param contentLength The length of the content in bytes, or {@link C#LENGTH_UNSET} if
|
||||||
* unknown.
|
* unknown.
|
||||||
* @param bytesDownloaded The number of bytes that have been downloaded.
|
* @param bytesDownloaded The number of bytes that have been downloaded.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user