



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android 学习笔记-services篇一、Service简述 Service主要执行长时间的操作,不提供用户界面。主要有两种形式:Started:组件调用startservice()来启动service,一旦启动,service便独立运行,并不依赖于其它组件的存在。Bound:当组件调用bindService()方法,绑定到service上时,service处于bound状态。Bound service允许组件与service交互:发送请求、返回结果。多个组件可绑定到同一个service,只有当所有绑定的组件都unbind后,service才destroy。service可同时工作于这两种方式,允许独立也允许绑定:实现onStartCommand()允许started(独立),实现onBind()允许bound(组件绑定)。对service的操作就像对activity的操作一样。*service会运行在宿主进程的主线程中,它不会创建自己的线程也不会运行在独立的进程中。因此,如果操作会阻塞或者频繁操作CPU的话,应该为service单独创建线程。二、service的创建为了创建service,必须创建Service的子类,并覆盖一些方法。主要有:onStartCommand():当组件调用startservice()时该方法执行,执行之后service启动。如果实现了该方法必须手动停止service(stopSelf()或者stopSelf()),如果只是提供bind的话,无需实现该方法。该方法必须返回Integer用来标识当service被kill后应该执行的操作。有如下几个数值供选用。START_NOT_STICKY 不重新创建。START_STICKY 会重新创建service,但不会重新递交最后的Intent。START_REDELIVER_INTENT 会重新创建service并重新递交最后的Intent。适合那些必须立即重新开始的service,像下载。onBind():当其它组件调用bindService()想绑定到该service上时执行。在该方法的实现中必须通过返回IBinder来提供一个用户与service交互的接口,如果不想绑定的话,就返回NULL。OnCreate():第一次创建service时调用。onDestroy():销毁时调用。应该再次方法中清除所有的资源像线程、注册的listener、receivers等等。l 如果service通过startService()启动,则一直运行直到stopSelf()或者其他组件stopService();l 如果service通过bindService()启动,则会在组件解除绑定后销毁。声明service . . 跟activity一样servcie也可以通过定义intent filter来规定可以访问service的application。三、创建started service组件通过startservice()方法创建该类service,并会导致service的onStartCommand()方法被调用。当组件startService()时会传递一个特指该service的Intent并可以带有一定的数据供service使用。Service将在onStartCommand()中收到这个Intent。有两个类供我们继承来创建service。Service:基本的service子类,最好在其中手动创建线程来执行业务操作。IntentService:Service的子类,它用工作线程,每次处理一个请求,适合不需要同时处理多个请求的service。需要有调用父类的构造方法以及实现onHandleIntent(),在该方法中收到来自请求的Intent,来做业务操作。3.1 扩展IntentService(不支持多线程)默认的IntentService会做如下处理: 创建默认的工作线程。 创建默认的工作队列,保证每次执行一个任务,不用担心多线程。 当所有request被处理后停止service,不用手动调用。 提供对onBind()的默认实现,返回NULL。 提供对onStartComment()的默认实现,并发送Intent到onHandleIntent()。如果还需要覆盖替他的父类方法的话,要注意调用super implements例如覆盖onStartCommand()必须返回默认的实现。Overridepublic int onStartCommand(Intent intent, int flags, int startId) Toast.makeText(this, service starting, Toast.LENGTH_SHORT).show(); return super.onStartCommand(intent,flags,startId);*除了onHandleIntent()方法不需要调用super class的还有onBind()(除非有activity需要绑定);3.2 扩展service(支持多线程)略3.3 开启service示例代码:Intent intent = new Intent(this, HelloService.class);startService(intent);如果想让service返回一个结果的话,启动service的组件可以创建一个broadcast的PendingIntent并把它传递给没搞明白.,然后service可以用广播返回数据。3.4 停止服务当我们必须手动停止servcie服务时可以用stopService(int)将最近的requestID作为参数。只有当最近的request结束后,service才会停止,避免了在其它request未处理完之前就结束service。四、创建bound service当我们想与来自activity或其它组件的service交互或者想暴漏给其他应用该应用的一些功能时,应该创建bound service。组件可以调用unbindService()解除绑定。五、向用户发送通知Service运行后便可通过Toast Notifications or Status Bar Notifications来通知用户事件。六、在前台运行服务A foreground service must provide a notification for the status bar , which is placed under
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级历史上册 第2课 原始农耕生活说课稿 新人教版
- 5.1 动物的主要类群 说课稿-2025-2026学年人教版生物八年级上册
- 12观察细胞教学设计-2023-2024学年科学五年级下册科学冀人版
- 17汉魏晋诗三首教学设计-2025-2026学年高中语文必修一粤教版
- 2025年初中生物学教师招聘考试测试卷及答案(共三套)
- 2025年中考化学试题分类汇编:综合应用题(第1期)解析版
- 蔬果储存课件
- 2025年中考化学试题分类汇编:化学计算题(第1期)解析版
- 活动1 创建表格与数值计算说课稿-2025-2026学年初中信息技术人教版新疆专用七年级下册-人教版新疆专用
- 第3课 油渍清洗有妙招教学设计-2025-2026学年小学劳动五年级上册湘教版《劳动教育》
- 2024国家安全教育大学生读本题库
- 样品确认流程培训
- 《基于管理需求下的酒店设计研究》
- 外研版九年级上册英语Module 1~12全册教案(大单元教学设计)
- 新人教高中英语必修一至选择性必修第四册课文(七个模块)
- 《发电机自动准同期装置整定计算技术导则》
- 《GMP基础知识培训》课件
- 我们为什么要努力学习-励志主题班会(课件)
- 《义务教育数学课程标准(2022年版)》初中内容解读
- 《全面质量管理》习题集(含答案)
- 统编版(部编版)语文二年级上册 作业设计《小蝌蚪找妈妈》(含答案)
评论
0/150
提交评论