第十五单元 后台操作及IntentService

Android并发编程三剑客:Thread、AsyncTask与IntentService深度解析 本文对比了Android开发中三种常用并发编程工具:Thread、AsyncTask和IntentService。Thread作为基础并发单元,提供完全手动控制的灵活性,适合复杂并发场景但需谨慎管理生命周期。AsyncTask封装了线程池和Handler机制,简化UI线程交互,适合轻量级后台任务和UI更新。IntentService结合Service可靠性和HandlerThread便利性,提供顺序执行的后台任务处理能力,适合长时间运行的操作。 阅读详情

IntentService

一.IntentService介绍

IntentService,可以看做是Service和HandlerThread的结合体,在完成了使命之后会自动停止,适合需要在工作线程处理UI无关任务的场景。

  • IntentService 是继承自 Service 并处理异步请求的一个类,在 IntentService内有一个工作线程来处理耗时操作。
  • 当任务执行完后,IntentService 会自动停止,不需要我们去手动结束。
  • 如果启动IntentService 多次,那么每一个耗时操作会以工作队列的方式在 IntentService 的 onHandleIntent回调方法中执行,依次去执行,使用串行的方式,执行完自动结束。

二.IntentService的优点:不用开启线程

三.IntentService的缺点:使用广播向activity传值

四.案例:使用IntentService网络请求json串,将json串使用广播发送给activity界面

(1)创建服务:MyIntentService.java

public class MyIntentService extends IntentService {
    public MyIntentService() {
        super("MyIntentService");
    }

    /**
     * Creates an IntentService.  Invoked by your subclass's constructor.
     *
     * @param name Used to name the worker thread, important only for debugging.
     */
    public MyIntentService(String name) {
        super(name);
    }

    @Override
    protected void onHandleIntent(@androidx.annotation.Nullable Intent intent) {
        StringBuffer sb=new StringBuffer();
        HttpURLConnection connection=null;
        InputStream inputStream=null;
        try {
            URL url=new URL("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1");
            connection = (HttpURLConnection) url.openConnection();
            connection.setReadTimeout(5000);
            connection.setConnectTimeout(5000);
            connection.setRequestMethod("GET");
            connection.connect();
            if(connection.getResponseCode()==200){
                inputStream=connection.getInputStream();
                byte[] b=new byte[1024];
                int len=0;
                while((len=inputStream.read(b))!=-1){
                    sb.append(new String(b,0,len));
                }
                Intent intent1=new Intent();
                intent1.setAction("com.example.intentservice");
                Bundle bundle=new Bundle();
                bundle.putString("json",sb.toString());
                intent1.putExtras(bundle);
                sendBroadcast(intent1);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(inputStream!=null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(connection!=null){
                connection.disconnect();
            }
        }
    }
}

(2)清单文件注册服务

 <service
            android:name=".MyIntentService"
            android:exported="false"></service>

(3)Activity代码

public class MainActivity extends AppCompatActivity {
    private  MyReceiver myReceiver;
    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction("com.example.intentservice");
        myReceiver=new  MyReceiver();
        registerReceiver(myReceiver,intentFilter);
        intent=new Intent(this,MyIntentService.class);
        startService(intent);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReceiver);
        stopService(intent);
    }
}
在昇腾910B服务上部署搭建适配PDF解析工具Mineru2.5开源项目 本文介绍了在昇腾910B服务器上部署开源PDF解析工具Mineru2.5的过程。首先从昇腾社区下载mindie镜像并运行容器,安装系统依赖。针对部署过程中遇到的多个报错问题(如torchvision与torch版本不匹配、昇腾软件栈与NumPy 2.0不兼容等),提供了具体解决方案和兼容版本。通过设置环境变量、安装指定版本的Python依赖包,成功部署Mineru项目并下载模型。最后运行测试,验证了在NPU设备上运行pipeline的可行性。整个过程详细记录了版本适配和错误处理方法,为类似部署场景提供了参考 阅读详情

相关推荐

基于DSP28335的Matlab/Simulink代码生成实验七:A/D采样

实验七:讲解如何使用DSP的ADC模块,通过代码生成技术控制DSP进行电流采样,是后续实现电机闭环控制的重要环节。通过简单的实验来熟悉代码生成的过程。最终实现复杂算法代码自动生成,进行高性能电机控制!

m0_73869369的博客 4725

Android中Intent传递对象的两种方法(Serializable,Parcelable)

  今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是 Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我...

gongxinifacai的博客 162

openstack卷分离异常问题处理

对于 2023-05-10 之后的所有 OpenStack 版本,需要将Nova 配置为向 Cinder 发送服务令牌,然后 Cinder 接收该令牌。cinder.conf处添加service_token_role配置。1.修改nova的config文件添加如下配置。确定service role 是否存在。有关详细信息,请参阅。重启nova cinder 服务。nova-compute日志。cinder-api日志。

weixin_43391291的博客 477

Intent传递参数

1、向下一个活动传递参数通过putExtra()方法的重载,把传递的参数暂存在Intent中,启动另一个活动后,只需将参数从Intent中取出 //传递参数 Intent intent = new Intent(MainActivity.this,FirstActivity.class); intent.putExtra("key"...

da_xin的博客 5703

模拟调制系统实战:从AM到FM的5种调制方式对比与选型指南

本文深度解析AM、DSB、SSB、VSB、FM五种经典模拟调制方式,从实现电路、频谱效率、抗噪性能及工程成本等维度进行实战对比。通过MATLAB/Simulink仿真案例,提供清晰的选型决策框架,帮助工程师在无人机图传、短波通信、广播系统等具体项目中,根据带宽、功耗和抗干扰需求选择最优方案。

study的专栏 932

《深入 UFS Explorer:自定义 RAID 配置指南》

UFS Explorer支持以虚拟模式组装任何受支持的RAID配置,以便后续访问其内容或恢复丢失数据。启动RAID构建器;向RAID构建器主内容区域的列表中添加RAID组件;为不可用组件插入占位符(需当前RAID级别支持且软件兼容);调整组件的准确顺序;在“虚拟RAID配置”区域设置RAID参数;以虚拟模式组装阵列各部分。程序主窗口“存储设备导航面板”中打开的任何存储设备(包括驱动器、逻辑卷、磁盘镜像、虚拟磁盘及其他复杂存储设备)均可作为RAID组件。

melonbo的专栏 1404

android怎么给服务传值,详解Android中IntentService的使用方法

为什么我们需要IntentService ?Android中的IntentService是继承自Service类的,在我们讨论IntentService之前,我们先想一下Service的特点: Service的回调方法(onCreate、onStartCommand、onBind、onDestroy)都是运行在主线程中的。当我们通过startService启动Service之后,我们就需要在Ser...

weixin_39737051的博客 1057

新能源知识库(37)三代储能电芯介绍

2025年储能电芯三代技术演进概述 截至2025年6月,储能电芯已明确划分为三代: 第一代(280Ah):2019-2023年主流,能量密度180Wh/kg,循环寿命8000次,成本降至0.6元/Wh; 第二代(314Ah):2023年起主导,容量超1kWh,能量密度提升20%,循环寿命达15000次,系统成本降低15%; 第三代(500Ah+):2024年量产,能量密度突破440Wh/L(如宁德时代587Ah、阳光电源684Ah),20尺集装箱容量达6-9MWh,零部件成本降30%。 技术路线分化:卷绕派

竹君子之家 7910

Android Service和IntentService(启动方式startService和bindService)

Service Android四大组件之一,Service 是长期运行在后台的应用程序组件。 Service 不是进程,也不是线程,它和应用程序在同一个进程中 Service中不能做耗时操作,他是寄托于主线程的。运行在主线程中 service的生命周期,两种情况 IntentService(推荐使用) IntentService 是继承于 Service 并处理异步请求的一个类,在 I...

张雨的博客 7539

cdk&java | 分子sdf文件生成

sdf

ASKCOS博客 1089

在 SAP GUI Editor 中使用 OpenAI 自动生成 ABAP 代码 —— 技术实践与思考

在传统 SAP GUI Editor 场景下融入OpenAI开发者表达意图,模型负责实现。随着的持续演进,以及Joule等官方 Copilot 的加入,未来 ABAP 开发形态必将更加专注业务逻辑与架构设计,而把样板式编码交给 AI 自动完成。现在就动手试试,让你的下一段 ABAP 由 AI 来书写吧!

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 709

通过Intent向service传递数据

什么是intent的action? /** * Create an intent with a given action. All other fields (data, type, * class) are null. Note that the action must be in a * namespace because Intents are

u011279649的专栏 4121

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

第十五单元:后台操作及IntentService

后台操作及IntentServiceIntentService介绍后台任务队列 IntentService介绍 https://blog.youkuaiyun.com/qq_34178710/article/details/85055604#IntentService_4 后台任务队列

shuai_ge_feng的博客 763

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android 二 第十五单元

Service生命周期和启动方式和后台操作及IntentService欢迎使用浩浩写的博客Service介绍Service的启动方式Service生命周期后台操作及IntentService 欢迎使用浩浩写的博客 Service介绍 Service是Android的四大主键之一,使用方法和Acivity相似,但是没有运行时的界面,是在后台运行的。 Service的启动方式 Service需要手动创...

haohao_9的博客 114

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android——IntentService

IntentSevice为在单一后台线程中执行任务提供了一种直接的实现方式。它可以处理一个耗时的并确保不会影响到UI的响应性。另外IntentService的执行还不受UI生命周期的影响,以确保AsyncTask能够顺利运行。 但是IntentService有以下局限性: 不可以直接和UI做交互,为了他能把执行的结果体现在UI上,需要把结果返回给Activity工作任务队列是顺序执

ZhiChu_2025的博客 416

第十五单元总结

setContentText("播放器用的是前台服务")后台服务在系统内存不足时有被回收的可能,为了保活服务我们可以选择将服务写为前台服务。.setContentText("下载中。.setContentTitle("前台服务").setContentText("下载文件")//参数一:上下文 参数二:自定义服务类.class。* 线程用来发送通知。3:Service-前台服务。

l89349062的博客 75

IntentService 面试详解

前两篇文章介绍了AsyncTask与HandleThread,主要是针对Android的多线程编程。在这里补充下线程的知识。 线程是操作系统调度的最小单元,同时也是一种受限的资源(即不能无限制的创建和销毁,创建和销毁都会占用系统资源)。操作系统是通过时间片轮转的方式调度每个线程,因此不可能做到绝对的并行。 进程一般指一个执行单元,在PC或移动设备上指一个程序或者应用。一个进程可以包含一个或多个...

CoderZJ的博客 473

Service、IntentService、Thread的区别和联系

一、Service的介绍Service的官方介绍中比较重要的两点:1. A Service is not a separate process. The Service object itself does not imply it is running in its own process; unless otherwise specified, it runs in the same proce

奋斗在坚持的路上 1653

service与IntentService以及Thread的区别

Service缺陷: 1.不会启动专门的一条线程, service和他所在的应用位于同一进程中 2.servi也不是专门一条新线程, 不应该在service中直接处理耗时的任务 IntentService特征: 1.创建独立的worker线程来处理所有的intent请求 2.创建独立的worker线程来处理onHandleIntent()方法实现的代码,无需处理多线程问题 3.所有请求处理完成后,intentservice会自动停止,无需调用stopself()方法停止service 4.为s

wiseyue的博客 405

Android Service与IntentService测试

目录ServiceIntentService Service 布局文件中定义了四个按钮,分别设置了对应的监听事件:startService(),stopService(),bindService(),unbindService()。 在 MyService 的回调方法中打印该方法名以及对应线程。 测试: 点击顺序: Start -> Stop 可知 Service 的几个回调方法都是在 UI 线程中进行的,所以在这些方法中不可直接进行耗时操作。 点击顺序: Start -> Start -&g

ZHurric的博客 334

Service与IntentService

一、Service (1)service介绍 service是一个没有界面,可以长期运行在后台的应用程序(没有界面的activity);Service和其他组件(activity,broadcast,contentprovider)一样,运行在主线程,当在主线程中做耗时操作,大于5秒,就会ANR,所以在service中做耗时操作,应开启工作线程;因此不能用它来做耗时的操作,每...

黑夜的触手 238

Android 的线程(AsyncTask、IntentService详解)和线程池

前言:不变的还是那颗勇往直前的心。          心得来源于:《Android开发艺术探索》 Android 的线程和线程池 在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制的产生,并且线程的创建和销毁都有一定的开销。 当系统中存在大量的线程时,系统会通过时间片轮转的方式调度每个线程,因此线程不可能做到绝对的并发,除非

wu371894545的博客 1万+

Android 的线程(AsyncTask、HandlerThread、IntentService详解)和线程池

Android 的线程和线程池在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制的产生,并且线程的创建和销毁都有一定的开销。

YoungTr的专栏 6519

从网络获取数据(1)从newThread到AsyncTask在到IntentService

概述 安卓不允许在UI线程中发送网络请求,因此必须新启动一个线程。 如果我们在活动中new Thread,这样就会有问题,这个线程会随着活动的生命周期结束而结束,如果活动的命比这个线程短,活动死掉了,线程还没有进行完,然后也不幸 挂了,这样,获取数据的任务就相当于是失败了,这肯定是不可以的啊。所以我们需要使用一个后台进程,比如AsyncTask,但是这个AsyncTask也要能快速完成(最多

qingziguanjun1的专栏 781

Android AsyncTask、HandlerThread、IntentService 随笔

Android 中除了 Thread 之外能扮演线程的角色有很多如:AsyncTask 和 IntentService, HandlerThread AsyncTask 底层用到了线程池,而 IntentService 和 HandlerThread 底层则直接调用了线程。 AsyncTask 封装了线程池和 Handler,其主要是为了开发者在子线程中更新 UI ; Handler...

龙衣 479

Fragment 知识梳理, FragmentPagerAdapter ,RecyclerView 知识梳理,sharepreference,IntentService,service交互

Fragment: 会保存左右各一个界面,采用栈存储信息,page1234,从2开始滑动到3,会删除1,添加4,从OnCreateview开始OnDestoryView结束。第一次添加会从生命周期开始走,OnCreate。 三种情况 第一次添加 重新添加 移除 此时,它们内部的Fragment所走的生命周期为: RecyclerView 知识梳理:https://www.ji...

ZhangJiqun&191cm&85kg 841
上一篇: 第十四单元:Service生命周期和启动方式
下一篇: 第十六单元 Service进程间通信
安久儿
博客等级 码龄8年 2粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值