DownloadManager是否在空间不足时重新尝试或广播故障?

时间:2015-10-29 19:13:39

标签: android download-manager

我正在查看KitKat中的AOSP代码并在com.android.providers.downloads.DownloadThread注意到这段代码:

/**
 * Stores information about the completed download, and notifies the initiating application.
 */
private void notifyDownloadCompleted(
        State state, int finalStatus, String errorMsg, int numFailed) {
    notifyThroughDatabase(state, finalStatus, errorMsg, numFailed);
    if (Downloads.Impl.isStatusCompleted(finalStatus)) {
        mInfo.sendIntentIfRequested();
    }
}

奇怪的是,我发现它不会因STATUS_INSUFFICIENT_SPACE_ERROR广播失败,因为值为198并且状态检查已完成排除android.provider.Downloads中小于200的值:

    public static final int STATUS_INSUFFICIENT_SPACE_ERROR = 198;

    // ...

    public static boolean isStatusCompleted(int status) {
        return (status >= 200 && status < 300) || (status >= 400 && status < 600);
    }

我看到这段代码似乎可以防止由于空间不足导致下载失败。见com.android.providers.downloads.DownloadInfo

        case Downloads.Impl.STATUS_INSUFFICIENT_SPACE_ERROR:
            // avoids repetition of retrying download
            return false;

因此,如果由于空间不足导致下载失败,则不会发生广播,也不会重试。是对的吗?我还没有查看其他版本的AOSP,看看它们是否以相同的方式运行。

总之,似乎有兴趣收到下载成功或失败的通知的人不仅需要注册广播,还需要使用ContentObserver来观看下载ContentProvider的更改。

0 个答案:

没有答案