IntentServce DownloadManager的使用

public void onClick(View view) {
        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的使用


257221.pngservice执行在后台但是service的生命周期里无论是onCreate ,onBind都是执行住线程中的。

service虽然是没有界面执行在后台,但是不能直接进行耗时操作,比如http请求,文件操作等。我们可以在service里自己启动一个线程。或者使用
IntentService

IntentService 是Service类的子类,用来处理异步请求。客户端可以通过startService(Intent)方法传递请求给 IntentService IntentService onCreate() 函数中通过 HandlerThread 单独开启一个线程来处理所有Intent请求对象(通过startService的方式发送过来的)所对应的任务,这样以免事务处理阻塞主线程。 执行完所一个Intent请求对象所对应的工作之后,如果没有新的Intent请求达到,则自动停止Service;否则执行下一个Intent请求所对应的任务

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();
        }


    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值