IntentSvice和Service的区别

本文探讨了Android中的Service与IntentService的概念、特点和使用场景,特别强调了Service不是线程,不应在其中执行耗时操作,并介绍了IntentService如何简化异步任务处理流程。同时,通过实例对比展示了不当使用Service可能导致的应用崩溃问题。

首先IntentService是继承自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 process as the application it is part of.

2.A Service is not a thread. It is not a means itself to do work off of the main thread (to avoid Application Not Responding errors).

稍微翻一下(英文水平一般)

1.Service不是一个单独的进程 ,它和应用程序在同一个进程中。

2.Service不是一个线程,所以我们应该避免在Service里面进行耗时的操作

关于第二点我想说下,不知道很多网上的文章都把耗时的操作直接放在Service的onStart方法中,而且没有强调这样会出现Application Not Responding!希望我的文章能帮大家认清这个误区(Service不是一个线程,不能直接处理耗时的操作)。

有人肯定会问,那么为什么我不直接用Thread而要用Service呢?关于这个,大家可以网上搜搜,这里不过多解释。有一点需要强调,如果有耗时操作在Service里,就必须开启一个单独的线程来处理!!!这点一定要铭记在心。

IntentService相对于Service来说,有几个非常有用的优点,首先我们看看官方文档的说明:

IntentService is a base class for Services that handle asynchronous requests (expressed as Intents) on demand. Clients send requests throughstartService(Intent) calls; the service is started as needed, handles each Intent in turn using a worker thread, and stops itself when it runs out of work.

This "work queue processor" pattern is commonly used to offload tasks from an application's main thread. The IntentService class exists to simplify this pattern and take care of the mechanics. To use it, extend IntentService and implement onHandleIntent(Intent). IntentService will receive the Intents, launch a worker thread, and stop the service as appropriate.

All requests are handled on a single worker thread -- they may take as long as necessary (and will not block the

application's main loop), but only one request will be processed at a time

自己写了一个 测试 直接用Service 中写了一个耗时操作 居然进程没挂掉 ,,,用IntentService 写的进程居然挂掉了。。很纠结

Ymodem协议是一种在串行通信中用于数据传输的机制,起源于早期的Xmodem协议。该协议具备处理大容量数据文件的能力,支持数据校验、文件属性传递以及多文件批量传输。Qt是一个面向C++的跨平台开发框架,适用于构建图形界面程序及后台服务类应用。当结合Qt实现Ymodem协议时,能够开发出适用于多种设备的通信程序,包括桌面系统、嵌入式设备移动终端。 在Qt中实现Ymodem协议,需要掌握Qt的信号与槽机制、串口通信模块(如QSerialPort)以及线程管理技术。实现过程中通常包含以下主要环节: 1. 连接初始化:在通信双方确认状态后,启动数据传输流程。 2. 数据块传输:协议支持多种数据块大小,如128字节或1024字节。每个数据块需包含数据内容、编号及校验信息。接收端需对数据进行校验以保证完整性。 3. 序列管理与响应机制:通过编号确保数据顺序,发送端在收到确认信号后继续下一块传输。若未收到有效响应,则需重传。 4. 文件元信息传输:在正式传输前,发送方需传递文件名称及大小等信息,以便接收方进行存储准备。 5. 批量传输模式:支持多个文件的连续传输,需在数据中区分不同文件的块。 6. 传输结束机制:通常通过发送空数据块来终止通信过程。 在Qt中实现Ymodem协议的代码,通常需要创建多个类来封装串口通信逻辑及协议处理功能,同时需考虑异常处理数据恢复策略。代码涉及对QSerialPort的配置、数据流的监控、事件循环的管理等。此外,为提升用户体验,开发人员可能在代码中加入进度显示、传输速率计算等功能。 Qt的跨平台特性使得基于其开发的Ymodem协议实现具备良好的可移植性,可在不同操作系统上运行。开发此类程序需要开发者对Ymodem协议有深入了解,并熟悉Qt框架的使用,包括信号机制、多线程及串口通信等技术。高质量的代码实现能够确保协议在不同运行环境下的稳定性与可靠性。 Ymodem协议的实现常出现在开源项目中,为开发者提供了参考借鉴,有助于技术交流与社区发展。根据文件名“SerialPortYmodem”推测,该文件可能用于处理与串口通信相关的Ymodem逻辑。开发者在使用时应仔细查阅文档,理解各模块功能,以便正确集成应用。 综上,Qt实现Ymodem协议的开发涉及对协议机制与Qt框架的深入理解,能够构建出满足多种串行通信需求的程序。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
【更新至2024年】2007-2024年上市公司年报文本语气数据 1、时间:2007-2024年 2、来源:上市公司年报 3、指标:股票代码、会计年度、年报字数、年报词汇数、年报句子数、LM词典积极词汇数、LM词典消极词汇数、台大词典积极词汇数、台大词典消极词汇数、基于LM词典的TONE1、基于LM词典的TONE2、基于台大词典的TONE 4、范围:上市公司 5、参考文献:曾庆生,周波,张程,陈信元.年报语调与内部人交易:“表里如一”还是“口是心非” 王华杰,王克敏.应计操纵与年报文本信息语气操作研究 6、方法说明: 参照曾庆生等(2018)的研究,以 Loughran and McDonald(2011)提供的金融情感英文词汇列表为基础,依据有道词典金山词霸对 LM 词典中的英文词汇进行了翻译,与曾庆生等(2018)保留一个英文词汇对应多个中文单词的情况不同,只保留与该英文词汇表达的中文情感最相关的中文词汇,最终的词汇列表包括 2080 个消极词,1076 个积极词。由此计算 LM_TONE1=(积极词汇数-消极词汇数)/年报词汇数,同时我们还提供 LM_TONE2=(积极词汇数- 消极词汇数)/(积极词汇数+消极词汇数),LM_TONE 值越大,表示当年年报文本信息语气越积极。 2)参照王华杰王克敏(2018)的研究,使用台湾大学制作的《中文情感极性词典》,将诸如“积极”、“进步”、“高效”等积极属性词语集作为积极情绪词语列表;将诸如“低迷”、“暗淡”、“不利”等消极属性词语集作为消极情绪词语列表。基于此,计算文本信息语气 NTUSD _TONE=(积极词汇数量-消极词汇数量)/(积极词汇数量+消极词汇数量),NTUSD_TONE 值越大,表示当年年报文本信息语气越积极。 7、指标说明: [LM词典积极词汇数]-基于LM词典计算年报文本中的积极词汇数 [LM词典消极
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值