中易网

service与IntentService有什么区别

答案:2  悬赏:30  
解决时间 2021-03-14 06:56
service与IntentService有什么区别
最佳答案
service与IntentService有什么区别
IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent,对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的worker thread中处理,不会阻塞应用程序的主线程,这里就给我们提供了一个思路,如果有耗时的操作与其在Service里面开启新线程还不如使用IntentService来处理耗时操作。
下面就来测试一下:
1.Service:

package com.zhf.service;
import Android.app.Service;
import Android.content.Intent;
import Android.os.IBinder;
public class MyService extends Service {

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

@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
//经测试,Service里面是不能进行耗时的操作的,必须要手动开启一个工作线程来处理耗时操作
System.out.println("onStart");
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("睡眠结束");
}

@Override
public IBinder onBind(Intent intent) {
return null;
}
}

2.IntentService:

package com.zhf.service;

import Android.app.IntentService;
import Android.content.Intent;

public class MyIntentService extends IntentService {

public MyIntentService() {
super("yyyyyyyyyyy");
}

@Override
protected void onHandleIntent(Intent intent) {
// 经测试,IntentService里面是可以进行耗时的操作的
//IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent
//对于异步的startService请求,IntentService会处理完成一个之后再处理第二个
System.out.println("onStart");
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("睡眠结束");
}
}

测试主程序:

package com.zhf.service;

import Android.app.Activity;
import Android.content.Intent;
import Android.os.Bundle;

public class ServiceDemoActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startService(new Intent(this,MyService.class));//主界面阻塞,最终会出现Application not responding
//连续两次启动IntentService,会发现应用程序不会阻塞,而且最重的是第二次的请求会再第一个请求结束之后运行(这个证实了IntentService采用单独的线程每次只从队列中拿出一个请求进行处理)
startService(new Intent(this,MyIntentService.class));
startService(new Intent(this,MyIntentService.class));
}
}
全部回答
android中的service是用于后台服务的,当应用程序被挂到后台的时候,问了保证应用某些组件仍然可以工作而引入了service这个概念,那么这里面要强调的是service不是独立的进程,也不是独立的线程,它是依赖于应用程序的主线程的,也就是说,在更多时候不建议在service中编写耗时的逻辑和操作,否则会引起anr。 那么我们当我们编写的耗时逻辑,不得不被service来管理的时候,就需要引入intentservice,intentservice是继承service的,那么它包含了service的全部特性,当然也包含service的生命周期,那么与service不同的是,intentservice在执行oncreate操作的时候,内部开了一个线程,去你执行你的耗时操作。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
百度公司每年会涨薪吗
狗狗容易得狗瘟吗该怎么预防狗瘟
漳州一中分校招生考成绩怎么查询?
如何向上级反馈沟通当前工作执行中遇到的困难
陈姓家谱,我是山东省济宁市泗水县高峪镇西头
迪酷 CS安装时的背景音乐
CN变压器与AU变压器有什么区别?
马王三村在哪里啊,我有事要去这个地方
摩托车发动机发热
SD卡可以插在乐视智能电视上播放音乐,和视频
目黑区的近邻行政区
北京华策环球文化传媒的招聘是不是骗人的,我
幼儿园老师对我家小孩和家长太度不好,怎么形
望谟县复兴镇七村村民委员会在什么地方啊,我
三星s7蓝牙版本
推荐资讯
琳子玉美容养生馆怎么去啊,有知道地址的么
春春衣馆怎么去啊,有知道地址的么
方方平价超市地址有知道的么?有点事想过去
芙兰朵我想知道这个在什么地方
有一个三角形钢筋框架的三边长分别为20cm,50
竹炭烧烤在什么地方啊,我要过去处理事情
《粟粥荠菜》的主旨是什么???请快速回答。
8:20用英语说
有人用过宣伟油漆,乳胶漆吗
曲靖人最爱上的地方论坛是???
qq空间显示全部是零是不是对我设限了
我家狗的脑炎了,打了针,能好吗
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?