android入门 — Service

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的更多相关文章
- android 入门-Service实时向Activity通过BroadcastReceiver传递数据
引文: http://www.cnblogs.com/linjiqin/p/3147764.html <RelativeLayout xmlns:android="http://sch ...
- android 入门-Service
sdk 1.7 package com.example.hellowrold; import java.util.Random; import com.example.hellowrold.R.id; ...
- android入门——Service
简单记录一下四大组件之一的Service的简单实用. 先是最简单的用法,服务的开关,onBind方法的使用 package com.example.wkp.service; import androi ...
- Android入门:Service入门介绍
一.Service介绍 Service类似于Windows中的服务,没有界面,只是在后台运行:而服务不能自己运行,而是需要调用Context.startService(Intent intent);或 ...
- Android入门:绑定本地服务
一.绑定服务介绍 前面文章中讲过一般的通过startService开启的服务,当访问者关闭时,服务仍然存在: 但是如果存在这样一种情况:访问者需要与服务进行通信,则我们需要将访问者与服务进行绑定: ...
- Android入门教程之我见
真正的从安卓入门学习到实际工作也差不多一年时间了,也做了几个项目.在这期间经历了一开始学习Android的基本知识后仍旧无从下手,不知道如何开始开发一个app,到现在也开始学会注意Android架构的 ...
- 小猪的Android入门之路 day 1
小猪的Android入门之路 Day 1 Android相关背景与开发环境的搭建 ------转载请注明出处:coder-pig 本节引言: 随着社会经济的发展,移动互联网的越来越热,手机APP开发显 ...
- 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity
问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的. 人与人之 ...
- Android精通教程-第一节Android入门简介
前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...
随机推荐
- Idea项目中常见错误及笔记(Old)
1.Idea基础设置: File-->settings--> 1>修改字体:Font 2>修改编码格式:File Encodings(全部UTF-8,右下方复选框勾中--防止程 ...
- 将Vue插件发布到npm的完整记录
前言 面对越来越多的组件库,越开越多的ui库,学会发布库已经是前端必须会的事情了,也算是为开源贡献一份力量,在网络上看了一些前者的文章,也算的发布成功了,虽然还存在很多问题,路不积跬步,无以至千里 ...
- python 装饰器和软件目录规范一
1.装饰器和迭代器的概念. 装饰器本质是一个函数,是为其他函数添加附加功能. 原则:不修改原函数源代码 不修改原函数的调用方式 2.装饰器的简单应用 # Author : xiajinqi impor ...
- 一个C语言萌新的学习之旅(持续更新中...)
三:计算和类型 一:隐式转换和显示转换 隐式转换:隐式转换指的是自动类型转换,自动向精确,大范围类型转换. 显示转换:例如:(int)3.5*6.0f=18.0f (int)(3.5*6.0f)=21 ...
- python习题20190130
#encoding=utf-8 ''' 一家商场在降价促销.如果购买金额50-100元(包含50元和100元)之间,会给10%的折扣,如果购买金额大于100元会给20%折扣.编写一程序,询问购买价格, ...
- 20155207王雪纯 2006-2007-2 《Java程序设计》第二周学习总结
20155207王雪纯 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 整数类型:short(占2字节).int()占4字节.long(占8字节) " ...
- 20155212 实验一《Java开发环境的熟悉》实验报告
20155212 实验一<Java开发环境的熟悉>实验报告 命令行下Java程序开发 命令创建实验目录 输入mkdir 2051212创建以自己学号命名的文件夹,通过cd 20155212 ...
- #20155327 2016-2017-2 《Java程序设计》第三周学习总结
20155327 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 一.三种重要的数字表示 无符号:编码基于传统的二进制表示法,表示大于或者等于零的数字. 补码 ...
- Ubuntu + apache + Mysql +php
发生了乱码问题: 打开apache配置文件: sudo gedit /etc/apache2/apache2.conf,在最后面加上:AddDefaultCharset UTF-8,如果还乱码,再将U ...
- 【LG3235】 [HNOI2014]江南乐
题目描述 给出\(n\)堆石子, 每次可以选择将大于某个数\(f\)一堆平均分成多个堆, 最后不能操作的失败. 题解 10pts 直接爆搜即可. 70pts 像我们对这类题目的常规操作那样,将一整个局 ...