Android怎么在Service中执行耗时操作
一.Service能不能执行耗时操作?
Service是Android四大组件之一,是运行在后台的服务,可用来执行不需要在前台展示的动作,如播放音乐等;有些人可能会认为,
Service竟然是在后台运行的那不就可以用来执行耗时操作了,这样也不会影响前台页面,其实不行,因为Service也是运行在主线程,Service的onStartCommand() 和 onBind() 方法中不能执行耗时操作
所以Service是不能用来执行耗时操作的。
二.Service中开启线程
既然Service不能执行耗时操作,那么如果我们需要在Service中执行耗时操作要怎么办呢? 那肯定是开启子线程来处理:
例如:
new Thread(new Runnable() {@Overridepublic void run() {}}).start();
这样确实可以,但是Android中提供了一个封装好子线程的Service给我们使用,使用起来更加简单,那就是IntentService。
三.IntentService的使用:
1.IntentService简介:
IntentService是继承Service的抽象类,在IntentService中有一个工作线程来处理耗时操作。
2.IntentService源码
我们先来看下IntentService的源码:
public abstract class IntentService extends Service {
private volatile Looper mServiceLooper;
private volatile ServiceHandler mServiceHandler;
private String mName;
private boolean mRedelivery;
IntentService继承Service
@Override
public void onCreate() {
// TODO: It would be nice to have an option to hold a partial wakelock
// during processing, and to have a static startService(Context, Intent)
// method that would launch the service & hand off a wakelock.
super.onCreate();
HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}
我们看到IntentService的onCreate方法中利用HandlerThread创建了一个循环的工作线程,然后将工作线程中的Looper对象作为参数来创建ServiceHandler消息执行者。
3.IntentService的使用:
public class TestService extends IntentService {public TestService() {super("TestService");}@Overrideprotected void onHandleIntent(@Nullable Intent intent) {//执行耗时操作}}
可以看到IntentService的使用非常简单。
Android 避免耗时操作及解决办法
1、Service的onStartCommand() 和 onBind() 方法中不能执行耗时操作
2、BroadcastReceiver的onReceive方法不能执行耗时操作,因为这个方法是在主线程执行的,耗时操作会导致UI不顺畅,超过10秒钟可能会被系统杀死
3、UI线程执行耗时操作,可以采用View.post方法来执行,或者使用Handler
4、onPause 中不适合做耗时较长的操作,Activity的跳转要先执行完前一个Activity的onPause方法,如果执行耗时操作会影响UI的显示
书到用时方恨少,纸上得来终觉浅。现在大环境不好,内卷很严重,加油。
Android怎么在Service中执行耗时操作相关推荐
- 使用IntentService在Service中创建耗时任务
IntentService是Service的子类,比普通的Service增加了额外的功能. Service存在两个问题: 1,Service不会专门启动一条单独的线程,Service与它所在应用访问者 ...
- android编程任务进度条,Android应用开发之AsyncTask 处理耗时操作和显示进度条
在Android中实现异步任务机制有两种,Handler和AsyncTask.优缺点自己百度,推荐使用AsyncTask. private ProgressDialog dialog; //新建一个对 ...
- ORA-14551: 无法在查询中执行 DML 操作
最近在调试一个带DML操作的函数时,一直不成功,在PL/SQL中测试时没问题,通过SQL语句调用函数时就不行了,刚开始一直没找到原因,后来无意间把 函数中捕获异常的代码注释掉,终于通过SQL调试时,弹 ...
- 使用SQL数据库在Python中执行CRUD操作
目录 介绍 背景 在Visual Studio中创建一个Python项目 在SQL中创建数据库和表 为数据库创建配置文件 安装Python包 "Pypyodbc" 创建连接文件 创 ...
- PL/SQL“ ORA-14551: 无法在查询中执行 DML 操作”解决
环境 Oracle 11.2.0 + SQL Plus 问题 根据以下要求编写函数:将scott.emp表中工资低于平均工资的职工工资加上200,并返回修改了工资的总人数.PL/SQL中有更新的操作, ...
- 【数据库】请问在 score表中执行以下操作:count( studentNo)、 count( score)、 count( * )、avg( studentNo)、 avg( score)、avg
题目 请问在 score表中执行以下操作:count( studentNo). count( score). count( * ).avg( studentNo). avg( score).avg( ...
- android 按钮中断,android – 如何“中断”在AccessibilityService中执行的操作?
我想做什么/我做了什么:我正在尝试为视障用户制作一个非常基本的TalkBack版本.我做了一个简单的辅助功能服务,读取用户点击的按钮的contentDescription并大声读出. @Overrid ...
- StarWars.Android 界面粉碎效果中的openGL操作解析
最近在学习openGL,就找了几个相关的开源项目,一边理解,一边记录~ 这篇文章要介绍的项目来自久负盛名的yalantis 阅读此文需要一点OpenGL基础,比如纹理坐标. 项目giuhub地址 首先 ...
- java gridfs_如何在GridFS中执行更新操作(使用Java)?
我使用的Mongo-Java-Driver 2.13是在 GridFS中 存储了一个PDF文件( 大小 为 30mb) .我能够轻松地执行插入,删除和查找操作. MongoClient mongo = ...
- 6-6 调查 :在6.3.1节编写的程序favorite_languages.py中执行以下操作
创建一个应该会接受调查的人员名单,其中有些人已包含在字典中,而其他人未包含在字典中. 遍历这个人员名单,对于已参与调查的人,打印一条消息表示感谢.对于还未参与调查的人,打印一条消息邀请他参与调查. ...
最新文章
- vb.net 设置打印纸张与页边距_文字办公—Word文档如何设置装订线
- 实验4-2-3 pta验证“哥德巴赫猜想” (20分)
- 无法开启计算机,Win7下鼠标右键无法开启计算机属性怎么办?
- 如何检测C语言中的内存漏洞(leak)?
- 前后端分离——token超时刷新策略
- 泉州中考分数如何计算机,2019年泉州中考总分多少分,泉州中考考试科目设置
- 【性能优化】PHP代码输出压缩后HTML
- DongLiORM 介绍
- 今天迈出第一步,开始了解iphone开发
- android adb安装 apk,adb 安装并运行 apk
- 【矩阵论】矩阵的广义逆
- CTFshow 愚人节欢乐赛 部分WP
- ThingJS:如何一键生成3D城市地图
- java大作穿越arpg_动作与角色扮演完美结合 精品ARPG游戏盘点
- 基于HTML5的在线绘图工具,基于HTML5 Canvas和jQuery 的绘图工具的实现
- c语言 字符金字塔问题
- e7用什么主板_八路E7的下场如何?盘点历代至尊版处理器现价
- ICLR2020 || 106篇深度强化学习顶会论文汇总
- texturepacker 打包图集
- PTA 海盗分赃 (25分)
热门文章
- Python中单线程、多线程和多进程的效率对比实验
- Spring漫画学习笔记(二) 什么是BeanFactory
- 数据管理DMS移动版之2018新年巨献
- mysql 关闭防火墙 命令_CentOS7关闭防火墙命令
- 基于Kotlin、ViewModel、LiveData和LifeCycle开发的Readhub客户端
- 不义联盟网站无法连接服务器,不义联盟2总是显示无法连接网络
- 计算机模糊,电脑显示不清晰_如果计算机显示器模糊或不清楚,该怎么办
- 10行代码玩转弹性调度的小把戏
- 长尾词推广系统推荐乐云seo_长尾词优化推广很好乐云seo
- 线性代数之——正定矩阵