Service是Android四大组件之一,他主要负责后台服务,长时间运行。

一:主要特点

(1)优先级大于Activity,即使Activity被停止后,他也不会轻易被终止

(2)即使被系统终止,在紫铜回复资源后,Service也会自动回复运行状态

(3)×××面操作,后台一致运行

二:生命周期

生命周期:启动Activity之后,会执行一次仅一次onCreate方法创建Service和一次onStartCommand方法,而多次启动时onStartCommand方法则会执行多次,终止Service时,则会执行到onDestory方法

触发的方法有:onCreate、onStartCommand、onDestory

三:创建及方法

使用Service时,必须继承自Service抽象类,实现其中的方法。常用的方法有:

(1)onCreate():非必须重写。负责Service的创建,初始化,或者全部工作。启动Service时执行一次,且只执行一次

(2)onStartCommand():非必须重写。负责Service应该完成的工作。每次启动Service时,都会执行一次

(3)onDestory():释放资源的部分。关闭时只执行一次

四:启动、停止方式

1:不与用户交互

启动方式:startService(intent对象)

终止方式:stopService(intent对象)

五:不与用户交互时的Service

测试方法:

◆创建类MyService继承自Service,重写onCreate、onStartCommand、onDestory三个方法,在方法体里面各添加一句输出语句

public class MyService extends Service {// 与用户交互时触发的方法,但是两种生命周期都必须重写@Overridepublic IBinder onBind(Intent intent) {return null;}//用来创建Service,完成初始化,工作都可以@Overridepublic void onCreate() {System.out.println("onCreate");super.onCreate();}// 用来标识Activity生命周期的开始,完成工作@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {System.out.println("OnStartCommand");return super.onStartCommand(intent, flags, startId);}// 两者生命周期的结束@Overridepublic void onDestroy() {System.out.println("onDestory");super.onDestroy();}
}

◆在主界面上,添加两个按钮,一个是start,一个为stop,为两个按钮添加监听。

public class MainActivity extends Activity implements OnClickListener {
private Intent intent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.start).setOnClickListener(this);//给启动按钮加监听findViewById(R.id.stop).setOnClickListener(this);//给终止按钮加监听intent = new Intent(this,MyService.class);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.start:startService(intent);//启动Servicebreak;case R.id.stop:stopService(intent);//终止Servicebreak;}}
}

◆看后台输出,可能出现的情况为:

(1)第一次单击Start按钮后:执行了一次onStart方法和onStartCommand方法
(2)第二次单击Start按钮后:仅执行了一次onStartCommand方法
(3)接下来每一次单击start按钮后,都仅执行一次onStartCommand方法
(4)点击Stop按钮后:执行了一次onDestory方法。

六:具体应用

功能实现:在Service中提供一个计时器,让他计数,当start和stop时观察结果。

◆MyService中

public class MyService extends Service{private Timer timer;//计时器声明private TimerTask task;//计时器Task声明private int i=0;//变量初始化@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();System.out.println("onCreate-----");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {System.out.println("onStartCommand-----");start();//把启动计时器的方法放在这个方法中return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {super.onDestroy();stop();//把关闭计时器的方法放在这个方法中System.out.println("onDestroy-----");}//定时器的启动public void start(){timer = new Timer();//实例化计时器task = new TimerTask() {//实例化计时器Task@Overridepublic void run() {i++;//变量自增System.out.println(i);//打印输出}};timer.schedule(task, 1000, 1000);//启动计时器}//定时器的关闭public void stop(){timer.cancel();}
}

◆主界面同上

◆结果显示

(1)第一次单击start:出发了onCreate和onStartCommand方法,onStartCommand中的计时器开始工作循环计数输出

(2)单击返回键后,任然继续输出

(3)单击Stop之后,停止输出,即执行了onDestory方法。

08-31 13:25:45.703: I/System.out(2055): onCreate----//第一次单击start之后
08-31 13:25:45.703: I/System.out(2055): onStartCommand-----
08-31 13:25:46.764: I/System.out(2055): 1
08-31 13:25:47.779: I/System.out(2055): 2
08-31 13:25:48.815: I/System.out(2055): 3
08-31 13:25:49.883: I/System.out(2055): 4
08-31 13:25:50.893: I/System.out(2055): 5
08-31 13:25:51.922: I/System.out(2055): 6
08-31 13:25:52.923: I/System.out(2055): 7
08-31 13:25:53.991: I/System.out(2055): 8//单击返回键后继续输出
08-31 13:25:54.983: I/System.out(2055): 9
08-31 13:25:55.998: I/System.out(2055): 10
08-31 13:25:57.000: I/System.out(2055): 11
08-31 13:25:57.433: I/System.out(2055): 12
08-31 13:25:58.456: I/System.out(2055): 13
08-31 13:25:59.039: I/System.out(2055): 14
08-31 13:25:59.474: I/System.out(2055): 15
08-31 13:25:59.474: I/System.out(2055): onDestory----//单击stop之后

注意:Service是单线程,如果你多次单击Start之后,即使你单击了同样次数的stop按钮,也只能终止你第一触发的那个Service。

Service还有一种启动方式,我们明日再续哈。。电脑很不给力啊。

转载于:https://blog.51cto.com/cinderella7/1286436

Android后台服务---无交互时的Service相关推荐

  1. Android——后台服务

    Android应用编程实验 实验名称:Android 后台服务 实验目的:通过Service设计后台服务程序,通过Broadcast实现信息广播机制 实验内容: 设计一个简单的后台音乐服务程序: 设计 ...

  2. Android后台服务Service

    后台服务 桌面应用程序:可见 服务:不可见  长期在后台运行 帮助应用执行耗时的操作 安卓的服务:安卓四大组件之一  不可见   后台长期运行 界面与服务有时候要执行数据交互 如何创建服务: 1. 创 ...

  3. android 后台服务拍照,Android实现后台开启服务默默拍照功能

    本文实例为大家分享了Android后台开启服务默默拍照的具体代码,供大家参考,具体内容如下 最近项目原因,需要编写一后台运行的程序,在给定时间间隔下进行拍照,关键技术主要是:1.开启服务:2.在不不预 ...

  4. Android 后台服务(Service)

    声明:各个方法的用法都在代码的注释里:可以自行观看 Service的代码: public class MyService extends Service {MyBinder myBinder = ne ...

  5. android震动服务能设置时长么,Android实现手机振动设置的方法

    本文实例讲述了Android实现手机振动设置的方法.分享给大家供大家参考.具体如下: main.xml布局文件: android:orientation="vertical" an ...

  6. 如何在Android应用程序中实现后台服务?

    在Android应用程序中实现后台服务,可以通过继承Service类来实现.下面是一个简单的示例代码: 首先,在AndroidManifest.xml文件中注册服务: <manifest xml ...

  7. android 发现服务,Android服务之网络服务发现服务

    自android 4.1 开始实现了一个网络服务的发现服务NsdService,其基于苹果的Bonjour服务发现协议,支持远程服务的发现和零配置. Bonjour协议包括IP地址的自动分配.服务名称 ...

  8. 【JavaService】部署Java jar为Windows后台服务

    将Java jar文件部署为Windows后台服务有多种方法:Service Installer.Java service Wrapper.JavaService.exe等等.这里介绍下使用JavaS ...

  9. Android移动开发之【Android实战项目】后台服务Service

    桌面应用程序:可见 服务:不可见 长期在后台运行 帮助应用执行耗时的操作 安卓的服务:安卓四大组件之一 不可见 后台长期运行 界面与服务有时候要执行数据交互 文章目录 如何创建服务 创建一个类 继承S ...

最新文章

  1. MaxCompute studio与权限那些事儿
  2. demo解析 小程序node.js_小程序-demo:小程序示例
  3. 分层应用——怎样实现登录?
  4. 在centos7中如何搭建局域网yum源仓库
  5. 《Visual C++数字图像模式识别技术详解(第2版)》一3.4 形状特征
  6. python 调用shell或windows命令
  7. Gym - 101246D 博弈
  8. css 缩放_CSS 中 transform、animation、transition、translate的区别
  9. 云服务器 ECS(CentOS) 安装 Node
  10. Redis的安装配置与介绍(Windows版)
  11. hdfs中与file数组类似的数组_Java中的数组
  12. 单引号、双引号、倒引号
  13. 文本对比工具哪些好用?竟然有在线的。真香。
  14. [Java反序列化]AspectJWeaver反序列化
  15. LC振荡器的工作原理
  16. 【地平线旭日X3派试用体验】基于MIPI Camera的目标检测 web 端展示,全流程(第三节)
  17. 涨姿势 , JavaScript 玩转多线程编程~
  18. 提取OTU表格中分类学名称
  19. 群英齐聚铸辉煌!孔明在线企鹅社区成功启动!
  20. 《机器学习实战:基于Scikit-Learn、Keras和TensorFlow第2版》-学习笔记(9):无监督学习技术

热门文章

  1. solr 5.3.1 使用java_Apache Solr 5.3.1 发布下载,Java 全文搜索服务器
  2. 叮咚酒店营销版小程序v8.5.8+前端
  3. 苹果CMSv10自适应高权重模板源码
  4. Java23种设计模式之单例模式
  5. Linux 系统的运行级别(Run Level)
  6. Python_百度图片以及百度贴吧图片抓取
  7. Python实现二叉树
  8. sql中left join后用on还是where
  9. 数据建模-聚类分析-K-Means算法
  10. 【AI视野·今日Robot 机器人论文速览 第十八期】Fri, 2 Jul 2021