全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android IntentService详解及使用实例

Android IntentService详解

一、IntentService简介

IntentService是Service的子类,比普通的Service增加了额外的功能。先看Service本身存在两个问题: 

  • Service不会专门启动一条单独的进程,Service与它所在应用位于同一个进程中; 
  • Service也不是专门一条新线程,因此不应该在Service中直接处理耗时的任务;  

二、IntentService特征

  • 会创建独立的worker线程来处理所有的Intent请求; 
  • 会创建独立的worker线程来处理onHandleIntent()方法实现的代码,无需处理多线程问题; 
  • 所有请求处理完成后,IntentService会自动停止,无需调用stopSelf()方法停止Service; 
  • 为Service的onBind()提供默认实现,返回null; 
  • 为Service的onStartCommand提供默认实现,将请求Intent添加到队列中; 

 三、使用步骤(详情参考Service项目)

继承IntentService类,并重写onHandleIntent()方法即可;

MainActivity.Java文件

public class MainActivity extends Activity {  
  
  @Override  
  protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  
  }  
  
  public void startService(View source) {  
    // 创建所需要启动的Service的Intent  
    Intent intent = new Intent(this, MyService.class);  
    startService(intent);  
  }  
  
  public void startIntentService(View source) {  
    // 创建需要启动的IntentService的Intent  
    Intent intent = new Intent(this, MyIntentService.class);  
    startService(intent);  
  }  
}  

 MyIntentService.java文件

public class MyIntentService extends IntentService {  
  
  public MyIntentService() {  
    super("MyIntentService");  
  }  
  
  @Override  
  protected void onHandleIntent(Intent intent) {  
    // IntentService会使用单独的线程来执行该方法的代码  
    // 该方法内执行耗时任务,比如下载文件,此处只是让线程等待20秒  
    long endTime = System.currentTimeMillis() + 20 * 1000;  
    System.out.println("onStart");  
    while (System.currentTimeMillis() < endTime) {  
      synchronized (this) {  
        try {  
          wait(endTime - System.currentTimeMillis());  
        } catch (InterruptedException e) {  
          e.printStackTrace();  
        }  
      }  
    }  
    System.out.println("----耗时任务执行完成---");  
  }  
}  
 

MyService.java文件

public class MyService extends Service {  
  
  @Override  
  public IBinder onBind(Intent arg0) {  
    return null;  
  }  
  
  @Override  
  public int onStartCommand(Intent intent, int flags, int startId) {  
    // 该方法内执行耗时任务可能导致ANR(Application Not Responding)异常  
    long endTime = System.currentTimeMillis() + 20 * 1000;  
    System.out.println("onStart");  
    while (System.currentTimeMillis() < endTime) {  
      synchronized (this) {  
        try {  
          wait(endTime - System.currentTimeMillis());  
        } catch (InterruptedException e) {  
          e.printStackTrace();  
        }  
      }  
    }  
    System.out.println("----耗时任务执行完成---");  
    return START_STICKY;  
  }  
}  

运行上述代码,启动MyIntentService的会使用单独的worker线程,因此不会阻塞前台的UI线程;而MyService会。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # IntentService  # IntentService详解  # IntentService实例代码  # Android Service类与生命周期详细介绍  # 详解Android中的Service  # Android 如何保证service在后台不被kill  # android使用NotificationListenerService监听通知栏消息  # Android实现微信自动向附近的人打招呼(AccessibilityService)  # Android AccessibilityService实现微信抢红包插件  # Android Service中使用Toast无法正常显示问题的解决方法  # Android基于service实现音乐的后台播放功能示例  # Android Service的启动过程分析  # 也不  # 子类  # 希望能  # 重写  # 谢谢大家  # 所需要  # 先看  # 多线程  # 与它  # 增加了  # 完成后  # 是专门  # brush  # strong  # java  # MainActivity 


相关文章: 如何用美橙互联一键搭建多站合一网站?  建站之星备案流程有哪些注意事项?  招贴海报怎么做,什么是海报招贴?  建站主机核心功能解析:服务器选择与网站搭建流程指南  如何通过商城免费建站系统源码自定义网站主题?  北京网站制作公司哪家好一点,北京租房网站有哪些?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  孙琪峥织梦建站教程如何优化数据库安全?  免费网站制作appp,免费制作app哪个平台好?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  网站企业制作流程,用什么语言做企业网站比较好?  c++ stringstream用法详解_c++字符串与数字转换利器  ,怎么用自己头像做动态表情包?  香港服务器如何优化才能显著提升网站加载速度?  Swift中switch语句区间和元组模式匹配  如何在香港服务器上快速搭建免备案网站?  广东企业建站网站优化与SEO营销核心策略指南  如何使用Golang table-driven基准测试_多组数据测量函数效率  建站之星Pro快速搭建教程:模板选择与功能配置指南  宝塔建站助手安装配置与建站模板使用全流程解析  开心动漫网站制作软件下载,十分开心动画为何停播?  建站之星安装步骤有哪些常见问题?  如何基于PHP生成高效IDC网络公司建站源码?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  香港服务器租用费用高吗?如何避免常见误区?  深圳网站制作平台,深圳市做网站好的公司有哪些?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何用已有域名快速搭建网站?  微信推文制作网站有哪些,怎么做微信推文,急?  如何破解联通资金短缺导致的基站建设难题?  如何用搬瓦工VPS快速搭建个人网站?  Android自定义控件实现温度旋转按钮效果  如何批量查询域名的建站时间记录?  创业网站制作流程,创业网站可靠吗?  ppt制作免费网站有哪些,ppt模板免费下载网站?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  如何用景安虚拟主机手机版绑定域名建站?  如何在腾讯云服务器快速搭建个人网站?  宝塔新建站点报错如何解决?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  完全自定义免费建站平台:主题模板在线生成一站式服务  如何高效搭建专业期货交易平台网站?  如何在Golang中指定模块版本_使用go.mod控制版本号  免费ppt制作网站,有没有值得推荐的免费PPT网站?  如何做网站制作流程,*游戏网站怎么搭建?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  Thinkphp 中 distinct 的用法解析  如何在Golang中使用replace替换模块_指定本地或远程路径 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。