I have the same situation when loading bundles from server: it starts from 0.0, then gets stuck at 0.5 for almost all the time of a bundle being downloaded and in the end quickly jumps to 0.77, 0.95 and then to 1.0.
AsyncOperationHandle.PercentComplete: reports the percentage of sub-operations that have finished. For example, if an operation uses six sub-operations to perform its task, the PercentComplete indicates the entire operation is 50% complete when three of those operations have finished (it doesn’t matter how much data each operation loads).
AsyncOperationHandle.GetDownloadStatus: returns a DownloadStatus struct that reports the percentage in terms of total download size. For example, if an operation has six sub-operations, but the first operation represented 50% of the total download size, then GetDownloadStatus indicates the operation is 50% complete when the first operation finishes.
Resuming, use AsyncOperationHandle.GetDownloadStatus().Percent to get the actual download progress (0 to 1).