IntentService基础知识

2021-07-05  本文已影响0人  纳兰沫

处理异步请求 实现多线程

1.使用场景

线程任务 需按顺序 在后台执行

最常见的场景:离线下载
不符合多个数据同时请求的场景:所有的任务都在同一个Thread looper里执行

2.使用步骤

1.定义IntentService的子类 复写onHandleIntent() 方法

class myIntentService extends IntentService {

    public myIntentService() {
        super("myIntentService");
    }

    //根据Intent实现耗时操作
    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        String taskName = intent.getExtras().getString("taskName");
        switch (taskName) {
            case "task1":
                Log.d("myIntentService","do task1");
                break;
            case "task2":
                Log.d("myIntentService","do task2");
                break;
            default:
                break;
        }
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    //重写onStartCommand() 方法
    //默认实现 = 将请求的Intent添加到工作队列

    @Override
    public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }
}

2.在Manifest.xml中注册服务

 <service android:name=".myIntentService" >
            <intent-filter>
                <action android:name="cm.sc.ff" />
            </intent-filter>
        </service>

3.在Activity中开启service服务

     void startService () {
        //同一个服务只会开启1个工作线程
        Intent i = new Intent("cn.scu.finch");
        Bundle bundle = new Bundle();
        bundle.putString("taskName","task1");
        i.putExtras(bundle);
        startService(i);

        Intent i2 = new Intent("cn.scu.finch");
        Bundle bundle2 = new Bundle();
        bundle2.putString("taskName","task2");
        i2.putExtras(bundle2);
        startService(i2);
    }

3.对比

3.1 与Service的区别

image.png

3.2 与其他线程的区别

image.png
上一篇下一篇

猜你喜欢

热点阅读