Service完全在后台运行,没有用户界面。使用的时候先创建Service子类,然后在AndroidManifest.xml中进行注册,同时可以通过<intent-filter.../>进行限制启动的Intent。

  Service中重要的方法有:

  1.IBinder onBind(Intent intent):这是Service子类必须实现的方法,这个方法返回一个IBinder对象,应用程序可以通过该对象与Service对象进行通信;

  2.void onCreate():在Service第一次被创建的时候调用;

  3.void onDestroy():在Service被关闭之前调用;

  4.void onStartCommand(Intent intent, int flags, int startId):该方法在客户端调用startService(Intent)来启动Service的时候调用;

  5.boolean onUnbind(Intent intent):当该Service上绑定的所有客户端都断开连接的时候调用这个方法。

第一种方式:使用Activity访问Service

  启动Service:startService(Intent intent)

  关闭Service:stopService(Intent intent)

第二种方式:绑定本地Service并与之通信

  如果Service和访问者之间需要进行方法调用和数据交换,则应该使用bindService()和unbindService()来启动和关闭Service。

  Context的bindService()方法

    bindService(Intent service, ServiceConnection conn, int flags)

  (1)service指定需要启动的Service

  (2)conn是一个ServiceConnection对象,这个对象用于监听访问者和Service之间的连接情况。当访问者与Service之间连接成功之后会回调ServiceConnection对象的onServiceConnected(ComponentName name, IBinder service)方法,当Service所在的宿主进程异常中断或其他原因停止的时候,会回调ServiceConnection对象的onServiceDisconnected(ComponentName name)方法。

  (3)flags指定绑定的时候是否自动创建Service(如果Serivice没有创建)。这个参数可以指定为0,或者BIND_AUTO_CREATE(自动创建)。

      ServiceConnection对象的onServiceConnected()方法中有一个IBinder对象,这个对象可实现与被绑定的Service之间的通信。

  

Service有两种方式调用:

  1.start

  一旦某个组件start一个Service,Service开始独立运行,不再与原来的组件产生任何联系;

  2.bind

  一旦某个组件bind一个Service,Service会为组件提供一个接口,近似于客户端,会进行交互。

MyService.java

public class MyService extends Service
{
private static final String TAG = "MyService"; //只有在第一次的时候才会被调用
public void onCreate()
{
super.onCreate();
Log.i(TAG, "onCreate");
} //在销毁的时候才会被调用
@Override
public void onDestroy()
{
super.onDestroy();
Log.i(TAG, "onDestroy");
} //每次请求的时候都会被调用
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.i(TAG, "onStartCommand");
return super.onStartCommand(intent, flags, startId);
} @Nullable
@Override
public IBinder onBind(Intent intent)
{
Log.i(TAG, "onBind");
return new MyBinder();
} class MyBinder extends Binder
{ }
}

  重写了一系列的方法,实现了输出功能。

public class MainActivity extends AppCompatActivity implements View.OnClickListener
{
Button button_start;
Button button_stop;
Button button_bindservice;
Button button_unbindservice;
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//连接失败
Log.i("Activity", "onServiceConnected");
} @Override
public void onServiceDisconnected(ComponentName name) {
//连接成功
Log.i("Activity", "onServiceDisconnected");
}
}; @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建启动Service的Intent
final Intent intent = new Intent(this, MyService.class); init();
//设置监听事件
} public void init()
{
button_start = (Button)findViewById(R.id.StartService);
button_start.setOnClickListener(this);
button_stop = (Button)findViewById(R.id.StopService);
button_stop.setOnClickListener(this);
button_bindservice = (Button)findViewById(R.id.BindService);
button_bindservice.setOnClickListener(this);
button_unbindservice = (Button)findViewById(R.id.UnbindService);
button_unbindservice.setOnClickListener(this);
} public void onClick(View view)
{
Intent intent = new Intent(MainActivity.this, MyService.class);
switch (view.getId())
{
case R.id.StartService:
startService(intent);
break;
case R.id.StopService:
stopService(intent);
break;
case R.id.BindService:
bindService(intent, conn, BIND_AUTO_CREATE);
break;
case R.id.UnbindService:
//只需要关闭连接即可
unbindService(conn);
break;
}
}
}

  可以对各个按钮单独设置监听点击的事件,也可以直接统一进行操作。

android入门 — Service的更多相关文章

  1. android 入门-Service实时向Activity通过BroadcastReceiver传递数据

    引文: http://www.cnblogs.com/linjiqin/p/3147764.html <RelativeLayout xmlns:android="http://sch ...

  2. android 入门-Service

    sdk 1.7 package com.example.hellowrold; import java.util.Random; import com.example.hellowrold.R.id; ...

  3. android入门——Service

    简单记录一下四大组件之一的Service的简单实用. 先是最简单的用法,服务的开关,onBind方法的使用 package com.example.wkp.service; import androi ...

  4. Android入门:Service入门介绍

    一.Service介绍 Service类似于Windows中的服务,没有界面,只是在后台运行:而服务不能自己运行,而是需要调用Context.startService(Intent intent);或 ...

  5. Android入门:绑定本地服务

    一.绑定服务介绍   前面文章中讲过一般的通过startService开启的服务,当访问者关闭时,服务仍然存在: 但是如果存在这样一种情况:访问者需要与服务进行通信,则我们需要将访问者与服务进行绑定: ...

  6. Android入门教程之我见

    真正的从安卓入门学习到实际工作也差不多一年时间了,也做了几个项目.在这期间经历了一开始学习Android的基本知识后仍旧无从下手,不知道如何开始开发一个app,到现在也开始学会注意Android架构的 ...

  7. 小猪的Android入门之路 day 1

    小猪的Android入门之路 Day 1 Android相关背景与开发环境的搭建 ------转载请注明出处:coder-pig 本节引言: 随着社会经济的发展,移动互联网的越来越热,手机APP开发显 ...

  8. 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity

    问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的. 人与人之 ...

  9. Android精通教程-第一节Android入门简介

    前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...

随机推荐

  1. python3 实现一个多级菜单小功能

    记录下一下 #!/usr/bin/env python3 ''' 需求:三级菜单 三级菜单,依次进入子菜单 ''' City = { '北京':{ '大兴区':[ '亦庄','黄村','中信新城',' ...

  2. Leetcode---栈系列刷题(python3实现)----#496 下一个更大元素I

    给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更 ...

  3. uva 156 - Ananagrams (反片语)

    csdn:https://blog.csdn.net/su_cicada/article/details/86710107 例题5-4 反片语(Ananagrams,Uva 156) 输入一些单词,找 ...

  4. linux——Shell编程基础

    1. shell 脚本的执行方式 1.1 直接绝对路径执行 1.2 相对路径执行 首先进入到shell脚本所造的目录 PS:用./执行要增加x权限.用bash执行可以不增加x权限 1.3 在当前she ...

  5. 20155212 2016-2017-2 《Java程序设计》第1周学习总结

    20155212 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 Chapter 1 Java平台概论 Java一开始就是为了有着有限内存与运算资源的消费型数 ...

  6. 第十四周 P187教材检查

    在IDEA中或命令行中运行P187 Guess.java. 这道题是继承语法抽象类一块的知识点,题目本身其实并不难,但是当时做的时候我找自己原来的代码花了很长时间,刚找到运行完截好图,就到时间了. 当 ...

  7. 20155313 2016-2017-2《Java程序设计》课程总结

    20155313 2016-2017-2<Java程序设计>课程总结 目录 一.每周作业链接汇总 二.实验报告链接汇总 三.代码托管链接 四.课堂项目实践 五.课程收获与不足 六.问卷调查 ...

  8. texterea 水平居中

    例子:<div style="width: 100%;text-align: center;"> <textarea class="xinde_msg& ...

  9. 安装centos minimal 版本后的网络配置(linux)

    1.修改网卡配置文件 2.重启网络服务 3.测试网络

  10. 【Jmeter测试】如何使用BeanShell断言判断请求返回的Json相应结果

      脚本结构​上图中,queryMaterialApiDTOListByPkIds是返回Json格式响应结果的请求,然后添加BeanShell断言详细判断Json结果中的值是否正确. Json格式的相 ...