美文网首页
IntentService基础知识

IntentService基础知识

作者: 纳兰沫 | 来源:发表于2021-07-05 13:55 被阅读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

    相关文章

      网友评论

          本文标题:IntentService基础知识

          本文链接:https://www.haomeiwen.com/subject/tiabultx.html