Android中的服务和windows中的服务是类似的东西,服务一般没实用户操作界面。它执行于系统中不easy被用户发觉,能够使用它开发如监控之类的程序。

服务的开发步骤

第一步:继承Service类

public class SMSService extends Service { }

第二步:在AndroidManifest.xml文件里的<application>节点里对服务进行配置:

<service android:name=".SMSService" />





Context.startService()或Context.bindService()

服务不能自己执行,须要通过调用Context.startService()或Context.bindService()方法启动服务

这两个方法都能够启动Service。可是它们的使用场合有所不同。

  • 使用startService()方法启用服务。调用者与服务之间没有关连。即使调用者退出了,服务仍然执行。
    public class HelloActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
    ......
    Button button =(Button) this.findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v) {
    Intent intent = new Intent(HelloActivity.this, SMSService.class);
    startService(intent);
    }});
    }
    }
  • 使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出。服务也就终止,大有“不求同一时候生,必须同一时候死”的特点。

    public class HelloActivity extends Activity {
    ServiceConnection conn = new ServiceConnection() {
    public void onServiceConnected(ComponentName name, IBinder service) {
    }
    public void onServiceDisconnected(ComponentName name) {
    }
    };
    @Override public void onCreate(Bundle savedInstanceState) {
    Button button =(Button) this.findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v) {
    Intent intent = new Intent(HelloActivity.this, SMSService.class);
    bindService(intent, conn, Context.BIND_AUTO_CREATE);
    //unbindService(conn);//解除绑定
    }});
    }
    }

生命周期

Context.startService()生命周期

假设打算採用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。

假设调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。

假设是调用者自己直接退出而没有调用stopService的话,Service会一直在后台执行

仅仅能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。

所以调用startService的生命周期为:onCreate --> onStart(可多次调用) --> onDestroy

详细细节见:http://blog.csdn.net/zhaoyazhi2129/article/details/32711481

Context.bindService()生命周期

假设打算採用Context.bindService()方法启动服务。在服务未被创建时。系统会先调用服务的onCreate()方法,接着调用onBind()方法。

这个时候调用者和服务绑定在一起,调用者退出了。系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。

假设调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。

假设调用者希望与正在绑定的服务解除绑定,能够调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法。

所以调用bindService的生命周期为:onCreate --> onBind(仅仅一次,不可多次绑定) --> onUnbind --> onDestory。

一但销毁activity它就结束。假设按home把它放到后台,那他就不退出。

详细细节见:http://blog.csdn.net/zhaoyazhi2129/article/details/32712073



补充:

在Service每一次的开启关闭过程中。仅仅有onStart可被多次调用(通过多次startService调用),其它onCreate。onBind,onUnbind,onDestory在一个生命周期中仅仅能被调用一次。

赵雅智_service生命周期的更多相关文章

  1. 赵雅智_Fragment生命周期

    官网帮助文档链接:  http://developer.android.com/guide/components/fragments.html 主要看两张图.和跑代码 一,Fragment的生命周 w ...

  2. 赵雅智_service电话监听2加接通电话录音

    步骤: 创建CallStateService继承Service 取得电话服务 监听电话动作 电话监听的对象 没有电话时 停止刻录 重设 刻录完毕一定要释放资源 电话响铃时 从麦克风採集声音 内容输出格 ...

  3. 赵雅智:service_startService生命周期

    案例演示 布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

  4. 赵雅智:service_bindService生命周期

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhemhpMjEyOQ==/font/5a6L5L2T/fontsize/400/fill/I0 ...

  5. 赵雅智_BroadcastReceiver

    BroadcastReceiver  用于接收程序(包含用户开放的程序和系统内建程序)所发出的Broadcast intent 耗电量 开机启动 窃取别人短信 窃取别人电话 开发: 创建须要启动的Br ...

  6. 赵雅智_Swift(1)_swift简单介绍及类型

    Swift 是 iOS 和 OS X 应用开发的一门新语言. 假设你有 C 或者 Objective-C 开发经验, Swift 的非常多内容都是你熟悉的. Swift 的类型是在 C 和 Objec ...

  7. 赵雅智_Fragment

    当我们须要动态的多界面切换的时候,就须要将UI元素和Activity融合成一个模块. 在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个界面动态改变.在4.0或以上系统中就能 ...

  8. 赵雅智:android教学大纲

    带下划线为详细内容链接地址.点击后可跳转.希望给大家尽一些微薄之力.眼下还在整理中 教学章节 教学内容 学时安排 备注 1 Android高速入门 2 Android模拟器与常见命令 3 Androi ...

  9. 赵雅智_ContentProvider

    ContentProvider介绍 ContentProvider是不同应用程序之间进行交换数据的标志API 也就是说:一个应用程序通过ContentProvider暴露自己的数据操作接口,那么无论该 ...

随机推荐

  1. 循序渐进PYTHON3(十三) --2-- DJANGO之FORM表单(自动生成HTML标签和自定制提示信息)

    在上一次的代码上做出进一步修改,使之能在页面上显示自定制的报错信息,并且使用form自动创建标签的功能. views.py from django.shortcuts import render,Ht ...

  2. 第5天:Ansible-Playbook

    Ansible中的每个模块专注于某一方面的功能.虽然每个模块实现的功能都比较简单,但是,将各个模块结合起来就可以实现比较复杂的功能.在Ansible中,将各个模块组合起来的文件是一个YAML格式的配置 ...

  3. 解决Linux环境下安装xampp之后外部无法连接MySQL的问题

    在Linux系统下,开发PHP一般都是LAMP环境,对于开发环境来讲,没有必要花太大精力去单独配置LAMP环境,采用xampp一键安装包是一个很好的方式.在Linux系统上安装xampp的过程这里就不 ...

  4. MAC安装go

    下载官方pkg文件,一路傻瓜next就行了. pkg默认是安装到/usr/local/go 安装完成,接下来是配置mac下的环境变量.打开终端(Terminal),敲入一下代码:cd ~ #进入当前用 ...

  5. [BZOJ3997][TJOI2015]组合数学(Dilworth定理+DP)

    题目名字是什么就不能往那方面想. 每个点拆成a[i][j]个,问题变为DAG最小路径覆盖,由Dilworth定理转成最长反链. 使用Dilworth定理的时候要注意那些点之间有边,这里任意一个点和其右 ...

  6. Codeforces Round #450 (Div. 2) ABCD

    这次还是能看的0 0,没出现一题掉分情况. QAQ前两次掉分还被hack了0 0,两行清泪. A. Find Extra One   You have n distinct points on a p ...

  7. iOS .a静态库的制作及使用

    一.制作.a静态库 1.创建静态库工程,工程命名为BaseSDK,生成的.a文件名变成libBaseSDK.

  8. Fatal error: Call to undefined function mb_detect_encoding()

    1.找到php扩展目录(我的php扩展目录的路径是:C:\Program Files\AppServ\php\extensions)     在extensions目录下面找到php_mbstring ...

  9. 通过Chrome模拟和调试网速慢的情况来限制一些P2P视频网站上传速度占满的情况

  10. <摘录>Linux 环境下编译 0.11版本内核 kernel

    系统环境:Fedora 13 + gcc-4.4.5 最近在看<linux内核0.11完全注释>一书,由于书中涉及汇编语言的地方众多,本人在大学时汇编语言学得一塌糊涂,所以实在看不下去了, ...