Service介绍

首先让我们来假设这样一种情况:用户正在使用你的音乐播放器播放着优美的歌曲,突然用户听说日本现在9级地震了想去浏览器中看看相关的新闻。也就是说用户想边听音乐边看新闻。如果按照我们前面讲过的使用Activity来做这个音乐播放器的话,你的播放代码只能放到按钮的事件中执行。这样做的缺点是如果播放的时间超过10秒左右,应用程序就会自动弹出对话框说什么该程序无响应问你是强制关闭还是继续等待。也就说说Android不允许在Activity中执行耗时比较长的操作。那么我们的这段音乐代码应该放到哪里你?答案当然是我们今天要将的Service上面啦。

Service从字面上是服务的意思,通俗一点说Service就是一直默默的运行的后台执行一些操作的东西。Service的优先级比Activity要高,比如说当系统空间不足时,Android系统会优先关闭优先级比较低的东西,比如说某些Activity。Service没有用户界面,所以它一般都被用来执行一些比较耗时的操作,比如我们上面说到的音乐播放。我也没有引用官方的解释,希望大家能够明白Service的作用。

Service实现

要实现一个Service很简单, 相信有了前面学习广播的例子,学习Service对您一定不会有问题的,呵呵。要实现一个Service一共有三步:

首先所有的Service都必须继承一个Service类,例如:

public class Service01 extends Service
{@Override public IBinder onBind(Intent arg0) { Log.i("qlf", "service onBind"); return null; }/** * 当服务被启动的时候首先执行的方法 * 在这个方法中可以进行一些资源的初始化 * */ @Override public void onCreate() { Log.i("qlf", "service created"); super.onCreate(); }/** * 服务被停止的时候执行的方法,通常 * 在这里销毁使用的资源 * */ @Override public void onDestroy() { Log.i("qlf", "service destroyed"); super.onDestroy(); }/** * 当启动服务的时候要调用的方法,在这个 * 方法中我们可以得到从Activity中穿过来 * 的Intent,从而进行相关的操作 * */ @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("qlf", "service command"); return super.onStartCommand(intent, flags, startId); }}

一些方法的注释我已经在程序里面标明了。然后在AndroidManifest.xml配置文件中添加这个Service的使用信息:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.qlf.test" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".mainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity><!--需要使用的Service信息--> <service android:name=".Service01"></service></application> <uses-sdk android:minSdkVersion="8" /></manifest>

最后在需要使用的Activity中调用就行了,具体的调用方法如下:

    public class btnOk_Click implements OnClickListener {@Override public void onClick(View arg0) { Intent service = new Intent(); service.setClass(mainActivity.this, Service01.class); mainActivity.this.startService(service); } }

最后执行的效果如下:

关于如何关闭已经运行的Service,只要将mainActivity.this.startService(service);中的startService改为stopService就行了。怎么样,是不是超级简单?实现简单,不过您也别大意了。下面有几个点您应该留意下,避免在Service中放一些低级的错误就不好了。

1.在Service不能直接调用某个Acitivty,如果要从Service中发出消息通知客户可以使用Thoast或者通知栏来通知用户,让用户来打开Acitivty。

2.在Service中运行的代码都是在主进程中的,所以如果您需要在Service中执行耗时的操作请启动新线程来操作,否则会影响到主进程的运行。

源码下载

下载

Android之旅---Service相关推荐

  1. 【转载】专访罗升阳:老罗的Android之旅

    CSDN:你用两年的时间炼就了深厚的Android内功修养,请问期间的学习之路是怎样的?有什么学习的心得和体会可分享? 罗升阳:那两年基本是把所有的业余时间都花在了学习Android上,包括工作日的下 ...

  2. 专访罗升阳:老罗的Android之旅(转载)

    本文转载地址:专访罗升阳:老罗的Android之旅 [编者按]我们常说的智能手机实际上就是手机上加了一个操作系统,那么大部分人都会跟我一样不禁发问,这个操作系统和我们接触更多的电脑上的操作系统一样吗. ...

  3. 《老罗的Android之旅》导读PPT

    虽然好几个月没更新博客了,但是老罗一直有在准备可以分享的东西的.除了早前在微博分享Android4.2相关技术之外,这次还特意准备了13个PPT,总结之前所研究过的东西.内容从Android组件设计思 ...

  4. 《老罗的Android之旅》专栏目录

    Android学习启动篇 在Ubuntu上下载.编译和安装Android最新源代码 在Ubuntu上下载.编译和安装Android最新内核源代码(Linux Kernel) 如何单独编译Android ...

  5. 专访罗升阳:老罗的Android之旅

    CSDN首页 > 业界 专访罗升阳:老罗的Android之旅 发表于2014-08-15 14:13| 10091次阅读| 来源CSDN| 0 条评论| 作者钱曙光 社区问答访谈罗升阳Andro ...

  6. android notification 定时显示,Android编程使用Service实现Notification定时发送功能示例...

    本文实例讲述了android编程使用service实现notification定时发送功能.分享给大家供大家参考,具体如下: /** * 通过启动或停止服务来管理通知功能 * * @descripti ...

  7. 自动生成Android界面,面向Android的Web Service界面自动生成技术研究

    摘要: 据统计,开发人员在开发应用程序的过程中,接近一半的代码用于用户界面部分,大约一半的运行时间用于执行这一部分.所以,减少用户界面部分的开发代码和运行时间,能有效提高程序的运行效率.智能家居中,由 ...

  8. Android 中的 Service 全面总结(转)

    转自:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html# Android 中的 Service 全面总结 1.Service的种 ...

  9. Android学习笔记-Service

    * 1.Service是一个应用程序组件 * 2.Service没有图形化界面 * 3.Service通常用来处理一些耗时比较长的操作 * 4.可以使用Service更新ContentProvider ...

最新文章

  1. .net面试问题汇总(转)
  2. Android Activity的launchMode四种启动模式备忘
  3. jQuery一些常用特效方法使用实例
  4. 【收藏】编译安装keepalived
  5. (课程学习笔记)Python初级入门精讲
  6. 注释工具_苹果已购丨Notability丨功能强大而简单易用的笔记及PDF注释工具
  7. 信奥中的数学:斯特林数、卡特兰数
  8. Golang Java 实现 【将有序数组装换为二叉搜索树】
  9. 【Flink-未解决】 FLink TaskManager with id is no longer reachable
  10. LeetCode OJ - Reorder List
  11. 大学课程 | 《计算机系统结构》详细知识点总结
  12. Windows系统批量创建文件夹的技巧
  13. 【deepstream部署Yolov6】
  14. 百度大脑车型识别使用攻略
  15. MS Castap学习(1)
  16. #进击的贪吃蛇-----将贪吃蛇,飞机大战,坦克大战功能融合形成新的游戏
  17. 姑苏城内的老黄,金鸡湖边的GTC,你get到几个点?
  18. 【单片机项目】基于STM32的智能小车设计(一)流程设计
  19. windows 查看端口
  20. windows下架设SVN服务器并设置开机启动

热门文章

  1. 查看删除对象(活动目录快照配置管理系列五)
  2. pyspider爬虫学习-文档翻译-About-Projects.md
  3. 【转载】浅谈缺陷截图处理
  4. 【MySQL】MySQL的group_concat使用例子
  5. 一次“ora-12170 tns 连接超时”的经历
  6. 一个QQ多用户登陆的实例代码
  7. Csharp: 拼音转汉字字符搜索字符串
  8. 英国推6.5亿英镑网络安全战略 强化安全屏障
  9. java使用jdom生成xml格式文件
  10. 2016年大数据Spark“蘑菇云”行动代码学习之AdClickedStreamingStats模块分析