文档章节

Service的使用(2)

c
 chuiyuan
发布于 2014/05/11 20:50
字数 661
阅读 130
收藏 4
点赞 0
评论 0

    服务 相当于一个没有界面 的Activity 。运行在后台 ,不可交互,不可以自己启动,要用别的Context 来执行startService () 或者 bindService()来绑定。

Service工作的机制 是

(1) client 成功地 bind Service 

(2) Service 传递一个 IBinder 给 Client

(3) client 可以直接调用  Service 的方法与接口

一。服务的新建 

服务重写 的方法有6个,已经包括 了默认的 onBind()方法。如下

@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}

我们注意到,onBind()方法将传递一个 IBinder 给client  . IBinder 作用是负责Service 与Client 的通信 。 说明 下

Bind implements  IBinder

这里的关键代码 如下 

public class MyBinder extends Binder  {
		MyService getService (){
			return MyService.this;            //返回一个Service 
		}
	}
	
	private final IBinder binder = new MyBinder();
	
	
	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		Log.i(TAG,"=====>onBinder");
		Toast.makeText(getBaseContext(), "onBinder", Toast.LENGTH_SHORT).show();
		return binder;
	}

这里,我们写了一个继承Binder 的内部类。用于向Activity 中返回 Service对象 。

为了使用Service  ,我们在Manifest.xml  文件中还对Service 进行注册。注意,与Activity  平级。

    <service  android:enabled="true"
            android:name=".MyService"></service>


二。启动Service 

    有两种方法启动

ConextWrapper.startService (Intent service );

ContextWrapper.bindService (Intent service , ServiceConnection conn ,int flags );

(1)先用方法一,这里的 Service 独立运行在后台 ,不受  Activity 的生命周期的影响 。当所有 Activity 都退出 时,Service 还是在执行,只到有Context 调用 stopService ()才停止 。

startBtn.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent i = new Intent (ServiceDemo.this,MyService.class);
				startService(i);
			}		
		});
stopBtn.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent i1 = new Intent (getBaseContext(),MyService.class);
				stopService(i1);
			}		
		});

我们点击运行后,发现运行过程 是

startBtn :onCreate( )---->onStart() 

stopBtn : onDestroy()


(2)在方法二中 ,我们用bindService() 。

    这种 方法里,只要  Activity 结束,Service 也结束 。使用 bindService () ,我们还要一个 ServiceConnection 对象 ,作用是实现 Activity 与 Service 的绑定。

如下:

MyService mService;
	ServiceConnection mConnection = new ServiceConnection (){
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			// TODO Auto-generated method stub
			mService = ((MyService.MyBinder)service).getService();
			//连接成功
		}
		@Override
		public void onServiceDisconnected(ComponentName arg0) {
			// TODO Auto-generated method stub
			mService =null;
		}		
	};

在ServiceConnection中,我们实现 了两方法。关于连接成功的。

在连接Service 的时候 ,我们会调用 onBind()方法,在方法中,我们返回了一个 IBinder对象 ,这个 对象 就是参数 service 。我们将 IBinder 类型转化 成之前 的MyBinder  内部类对象 ,再通过 这个 

对象 的getService ()方法得到Service 的操作对象 。

最后代码如下 :

startBtn.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent i = new Intent (ServiceDemo.this,MyService.class);
				bindService (i, mConnection ,Context.BIND_AUTO_CREATE);  
				//绑定服务
			}		
		});
		stopBtn.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				unbindService(mConnection);
				
			}		
		});
	}

运行过程 是:

bind: onCreate () ------>onBind()

unbind: unbindService()----->onDestroy()

事实上 在bindService() 时,Service  有一个原则,只给执行一次 onCreate() .




© 著作权归作者所有

共有 人打赏支持
c
粉丝 9
博文 91
码字总数 40993
作品 0
海淀
Linux启动/停止/重启Mysql数据库的方法

1、查看mysql版本 方法一:status; 方法二:select version(); 2、Mysql启动、停止、重启常用命令 a、启动方式 1、使用 service 启动: [root@localhost /]# service mysqld start (5.0版本是...

林夕2018 ⋅ 2016/09/29 ⋅ 0

如何启动/停止/重启MySQL

一、启动方式 1、使用 service 启动:service mysqld start 2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start 3、使用 safemysqld 启动:safemysqld& 二、停止 1、使用 service 启动:s...

afriendly ⋅ 2014/03/29 ⋅ 0

Android service (一) startService vs bindService

service 简介 service 是Android的4大组件之一, 用于在后台(这里指的是service不提供UI, 用户不可见)执行任务. service 是在UI线程上被创建, 并且在UI线程上运行的, 如果service需要执行耗时...

风荷举 ⋅ 2016/06/06 ⋅ 0

Android静态安全检测 -> Service组件暴露

Service组件暴露 - exported属性 一、android:exported 该属性用来标示,其他应用的组件是否可以唤醒Service或者和这个Service进行交互 1. true 表示可以 2. false 【1】表示不可以,只有同一...

老鹰a ⋅ 2017/12/21 ⋅ 0

Google免费CDN页面加速服务使用介绍

Google PageSpeed Service是Google提供的一项免费CDN加速服务,Page Speed Service会从网站的服务器抓取内容,重写网页,再通过Google的服务器呈现给用户浏览,利用谷歌强大的服务器处理能力...

李朝强 ⋅ 2013/08/01 ⋅ 3

跟我学习dubbo-在Linux操作系统上手工部署Dubbo服务(5)

在Linux操作系统上手工部署Dubbo服务 1、环境变量配置 Java环境变量----只需要JRE vi /etc/profile ## java env export JAVAHOME=/usr/local/java/jdk1.7.072 export JREHOME=$JAVAHOME/jre......

HI曲奇饼干 ⋅ 2016/01/09 ⋅ 1

mysql基础命令

操作 命令 exp 登录 -u 用户名 -p 密码 mysql -u root -p 启动 1、使用 service 启动:service mysqld start 2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start 3、使用 safemysqld 启动:...

沉默的懒猫 ⋅ 2016/07/22 ⋅ 0

AngularJS Service vs Factory 总结(持续更新中...)

1.首先,看一看方法: factory: service: 2.再看看例子使用: 定义一个angular module 使用service: 使用factory: service 和 factory 定义了一个service object/function。它们都是singlet...

平江夜弹 ⋅ 2015/05/18 ⋅ 0

android service 的各种用法(IPC、AIDL)

最近在学android service,感觉终于把service的各种使用场景和用到的技术整理得比较明白了,受益颇多,在此记录一下! service的主要功能如下: a. 执行需要长时间运行的操作,这个操作不与用...

wangxigui ⋅ 2013/05/21 ⋅ 3

android开发 Service (1)

一,什么是service 1, 不可见,后台运行, 2,耗时时间长。 3,是一个应用程序组件 4,没有图形化界面 5.可以使用service来更新ContentProvider ,发送intent 以及启动系统的通知等等。 二,...

DURONG ⋅ 2012/05/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 40分钟前 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

MVC——统一报文格式的异常处理响应

在我们写controller层的时候,常常会有这样的困惑,如果需要返回一个数据是,可能为了统一回去构造一个类似下列的数据格式: { status:true, msg:"保存成功!", data:[]} 而且在写...

alexzhu592 ⋅ 昨天 ⋅ 0

[知乎]SSH框架

网上图书馆管理系统包括管理员管理和图书管理,图书借阅,查询模块等等,网上商城包括前台页面和后台管理页面,两个都是以前别人的实际项目,只是别人用的不是SSH,我把他们改用SSH了,除了S...

颖伙虫 ⋅ 昨天 ⋅ 0

android -------- 打开本地浏览器或指定浏览器加载,打电话,打开第三方app

开发中常常有打开本地浏览器加载url或者指定浏览器加载, 还有打开第三方app, 如 打开高德地图 百度地图等 在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器。 如果手机本身...

切切歆语 ⋅ 昨天 ⋅ 0

linux 安装docker

通过以下命令下载安装docker wget -qO- https://get.docker.com | sh 执行以上命令后输出以下内容说明安装成功,注意红框中的内容,docker安装成功后默认只有root能使用,红框中给出的提示是...

haoyuehong ⋅ 昨天 ⋅ 0

482. License Key Formatting - LeetCode

Question 482. License Key Formatting Solution 思路:字符串转化为char数组,从后遍历,如果是大写字母就转化为小写字母,如果是-就忽略,如果遍历了k个字符(排除-)就追加一个-。 Java实现...

yysue ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部