DownloadManager should always be the best solution for long-running downloads. It manages network connectivity, task suspending/resuming and removal for you. In other words, you almost needn't worry about anything. Additionally , it's fairly easy to use and understand. You can search an example for detail usage.
If you use socket or http directly, you will have many things(and of course, a lot of coding work) to deal with .