if (view.getId() == R.id.btn1) {
DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"));
//setDestinationInExternalPublicDir已经指定到sd卡根目录,直接指定要下载到的目录名字即可
//目录名,文件名
request.setDestinationInExternalPublicDir("Download", "big_buck_bunny.mp4");
mEnqueue = downloadManager.enqueue(request);
} else if (view.getId() == R.id.btn2) {
DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
//从下载队列中移除
downloadManager.remove(mEnqueue);
}
}
DownloadManager的相关类
DownloadManager
DownloadManager.Request
DownloadManager.Query
IntentService的使用
service执行在后台但是service的生命周期里无论是onCreate ,onBind都是执行住线程中的。
IntentService有以下特点:
(1) 它创建了一个独立的工作线程来处理所有的通过onStartCommand()传递给服务的intents。
(2) 创建了一个工作队列,来逐个发送intent给onHandleIntent()。
(3) 不需要主动调用stopSelft()来结束服务。因为,在所有的intent被处理完后,系统会自动关闭服务。
(4) 默认实现的onBind()返回null
(5) 默认实现的onStartCommand()的目的是将intent插入到工作队列中
/**
* IntentService的特点
* 1自己内部维护了一个子线程,在onHandleIntent里可以执行耗时操作
* 2有一个队列 ,完成一个之后再继续下一个
* 3在执行完毕耗时操作之后会直接销毁自己
* <p/>
* // this.stopSelf();在服务内部销毁自己
*/
public class MyService extends IntentService {
public MyService() {
//指定子线程的名字
super("liuhang");
}
@Override
public void onCreate() {
super.onCreate();
Log.e("onCreate", "onCreate");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.e("onDestroy", "onDestroy");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e("onStartCommand", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
protected void onHandleIntent(Intent intent) {
//子线程,可以执行耗时操作
String name = Thread.currentThread().getName();
Log.e("onHandleIntent", name);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}