Service是Android四大组件之一

1、Service与Activity的区别在:Service一直在后台运行,没有用户界面。

2、选择Activity与Service的标准:如果某个程序组件需要在运行时向用户呈现某种界面,或者改程序需要和用户进行交互,就需要用Activity,否则需要考虑使用Service.

3、Android系统本身提供了大量的Service组件,开发者可以通过Service来操作Android系统。

4、Service组件有自己的生命周期。

5、Service与Activity都是从Context派生而来的,都可以调用Context里面定义的如getResources()、getContentResolver()等方法。

下面我们来先创建一个Service并启动

(1)定义一个继承Service的子类。

package com.example.testservice;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;public class FirstService extends Service{@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();System.out.println("onCreate");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// TODO Auto-generated method stubSystem.out.println("onStartCommand");return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();System.out.println("onDestroy");}}

注意:上面的onBind()方法是必须实现的方法。
(2)在AndroidMainfest.xml文件中配置该Service

<service android:name=".FirstService"><intent-filter ><action android:name="com.meritit.service.FIRST_SERVICE"/></intent-filter></service>

如果希望Service组件做某些事情,只要在onCreate()onStartCommand()方法中定义相关业务代码即可。

(3)运行Service

运行Service的方法有两种:

a: 通过Context的startService()方法:通过该方法启动Service,访问者与Service之间没有关联,即使访问者退出了,Service任然运行。

b:通过Context的bindService()方法:使用该方法启动Service,访问者与Service绑定在了一起,访问者一旦退出,Service也就终止了。

下面先通过第一种方式运行Service

package com.example.testservice;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity {private Button start;private Button stop;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取程序界面中的start、stop两个按钮start = (Button) findViewById(R.id.start);stop = (Button) findViewById(R.id.stop);final Intent intent = new Intent();intent.setAction("com.meritit.service.FIRST_SERVICE");start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {startService(intent);}});stop.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {stopService(intent);}});}
}

从上面代码中可以看出,启动、关闭Service非常容易,只需要调用Context里面定义的startService()方法和stopService()方法。

连续单击“启动Service"按钮,程序将会连续多次启动Service,LogCat如图:

从图中我们可以看出,onCreate方法只被调用了一次,这说明:每次Service被第一次启动调用onCreate()方法,多次启动已经启动的Service组件将不会再回调onCreate()方法啊,但每次启动时都会回调onStartCommand()方法,这样就可以根据不同的业务需求将业务代码放在onCreate()方法或onStartCommand()方法中。下图是Service的生命周期,因为比较简单所以就不叙述过程了。

下一篇将介绍:绑定本地Service并与之通信

转载于:https://www.cnblogs.com/lanzhi/p/6469470.html

Android菜鸟的成长笔记(16)——Service简介相关推荐

  1. Android菜鸟的成长笔记(11)——Android中的事件处理

    原文: [置顶] Android菜鸟的成长笔记(11)--Android中的事件处理 Android提供了两种方式来处理事件,一个是基于回调的事件处理,另一个是基于监听的事件处理,举个例子: 基于回调 ...

  2. Android菜鸟的成长笔记(13)——异步任务(Async Task)

    Android菜鸟的成长笔记(13)--异步任务(Async Task) 原文: [置顶] Android菜鸟的成长笔记(13)--异步任务(Async Task) Android的UI线程主要负责处 ...

  3. Android菜鸟的成长笔记(3)——给QQ登录界面说So Easy

    上一篇:Android菜鸟的成长笔记(2)--第一个Android应用 我们前面已经做了第一个Android应用程序,虽然有点像QQ的登录界面,但是很多地方还是很难看,这一篇咱们来将这个界面做成一个标 ...

  4. Android菜鸟的成长笔记(25)——可爱的小闹钟

    摘要: 这一篇主要使用系统为我们提供的一个服务AlarmManager来制作一个Android小闹钟,同时还涉及到了自定义主题.判断第一次启动应用.自定义动画.对话框.制作指导滑动页面等方面.最后形成 ...

  5. Android菜鸟的成长笔记(5)——Android系统源代码你下载了吗?

    在上一篇中我们用Android系统源代码分析了我们前面写的代码,有的朋友可能就会问怎么才能下载到Google官方的源代码呢?下面我们通过Git管理工具来对Android系统源代码进行下载.另外为了方便 ...

  6. Android菜鸟的成长笔记(28)——Google官方对Andoird 2.x提供的ActionBar支持

    在Google官方Android设计指南中(链接:http://www.apkbus.com/design/get-started/ui-overview.html)有一个新特性就是自我标识,也就是宣 ...

  7. 一个Android菜鸟入门Flutter 笔记(一)

    1. Dart 基础语法 1.1 hello world 先来看个hello world,入口依然是main方法. printInteger(int a) {print('Hello world, t ...

  8. Android登陆demo:界面设计及业务代码———Android菜鸟的成长日记

    距离上一次更新,两天前. 今天就从头开始来学习,当然是直接上案例了,就不扭扭捏捏的上基础知识了,基础知识是自己去学的,我直接从小的demo入手,开始新一轮的学习之路. 首先是关于界面设计(布局): 关 ...

  9. 一个Android菜鸟入门Flutter 笔记(二)

    1. 网络编程与JSON解析 默认的HttpClient请求网络 get() async {//创建网络调用示例,设置通用请求行为(超时时间)var httpClient = HttpClient() ...

最新文章

  1. 廖雪峰js教程笔记 2
  2. linux看电视系统,教你如何在Linux操作系统下观看电视节目
  3. ubuntu14.0.4下安装pycharm
  4. [译] Airbnb 在 React Native 上下的赌注(一):概述
  5. 解决微信小程序新建项目没有样式问题,以及官方demo
  6. html5制作拼图游戏教程,用HTML5制作视频拼图的教程
  7. Python日志模块logging高级用法
  8. 净利润大涨三倍、股价飙升,百度新上了一个秘密武器:强化学习
  9. 判断当前窗体是否是顶级窗体
  10. idea格式化代码失效
  11. Allatori混淆器的介绍以及使用方法
  12. Node.js 在微医的应用场景及实践
  13. 怎样用苹果手机看html文件在哪里,怎么在电脑上打开苹果手机上的文件?
  14. Python+Excel数据分析实战:军事体能考核成绩评定(一)项目概况
  15. 文本数据下的用户画像
  16. 解决【无法对套接字执行操作,因为系统缺少足够的缓冲区空间,或者因为系统上的队列已满127.0.0.1:8086】问题
  17. 六区哈卡服务器无限公会,魔兽怀旧服:哈卡硬币被改,加声望不加经验,秒升62级是不可能了...
  18. 给 iOS 装上旧版 APP,十年前的 iPad mini 重获新生!
  19. 微服务原则:去中心化数据管理
  20. java计算机毕业设计校园招聘管理系统源码+mysql数据库+lw文档+系统+调试部署

热门文章

  1. 浅谈非法NAT接入对网络的安全风险
  2. FireEye 红队失窃工具大揭秘之:分析复现 Confluence路径穿越漏洞 (CVE-2019-3398)
  3. cookie和session的使用和区别
  4. 如果外卖APP想窃听我,有几个骚操作?
  5. 高级函数技巧-函数柯里化
  6. [洛谷P1119]灾后重建
  7. vs2012 MSDN帮助文档离线包下载安装方法
  8. Java开发技术大杂烩(三)之电商项目优化、rabbitmq、Git、OSI、VIM、Intellj IDEA、HTTP、JS、Java...
  9. CSS实现水平垂直居中的方法总结
  10. 第十六章——处理锁、阻塞和死锁(3)——使用SQLServer Profiler侦测死锁