Android四大组件--服务(Service)
1. startService和bindService的区别
1. startService:
生命周期: onCreate---onStartCommand---onDestory
与服务的通讯: 无法与服务进行直接通讯
与开启者的关系: 服务一旦开启与开启者(activity)将没有什么联系了,就算开启者销毁了,服务依然存活。
在Settings应用界面中有显示
2. binderSerivce
生命周期: onCreate--onBind--onUnBind--onDestory
与服务通讯: 通过内部代理对象间接调用服务的方法
与开启者的关系: 一旦开启者销毁了,那么服务也将随之销毁。
在Settings应用界面无显示
startService和binderSerivce各自的优缺点:
能不能让服务长期运行在后台,并且还能与服务进行通讯
startService : 让服务长期运行在后台,但是无法与服务进行通讯
bindServcie : 可以与服务进行通讯,但是无法长期运行在后台
2. 本地服务通讯(服务运行在当前的应用程序里面)
1. 定义服务
public class ServcieDemo extends Service {}
2. 注册服务
<service android:name="com.itheima.bind.ServcieDemo"></service>
3. 编写服务的方法
/**
* 服务中的内部方法
*/
public void methodInService(String name , int money){
if(money <= ){
Log.d(this, name+"测试1");
}else{
Log.d(this,name+"测试2");
}
}
4. 定义一个内部类
/**
*内部代理对象
*/
class MyBinder extends Binder{
/**
* 内部人员中固有的方法,它的作用就让别人来访问它,然后它自己去访问服务中的方法。
* 通过迂回的手段达到从外部类调用服务中的方法效果。
* @param name
* @param money
*/
public void callMethodInService(String name , int money){
methodInService(name , money);
}
}
5. 服务绑定后返回内部代理对象
/**
* 如果服务成功绑定上了,那么就返回一个通讯频道,
* 返回一个内部代理对象
*/
@Override
public IBinder onBind(Intent intent) {
System.out.println("onBind");
//返回内部代理对象
return new MyBinder();
}
6. 在activity绑定服务
//绑定服务
public void bind(View v) {
Intent service = new Intent(this , ServcieDemo.class);
/**
* 第一个参数:intent对象
* 第二个参数:servcieConnection 用于监听服务当前的状态
* 第三个参数:BIND_AUTO_CREATE 服务自动创建,然后绑定。
*/
bindService(service, new MyConn(), BIND_AUTO_CREATE);
}
7. 在onServcieConnected方法中获取到内部代理对象
/**
* 监听服务的状态,服务是启动还是停止都会收到信息。
*/
class MyConn implements ServiceConnection{
/**
* 如果服务能够成功绑定上,那么这个方法将会调用,启动的参数service就是服务返回的内部对象 MyBinder
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//获取到服务内部返回的代理对象 ,用binder承接起来
binder = (MyBinder) service;
} @Override
public void onServiceDisconnected(ComponentName name) {}
}
8. 在其他地方调用内部对象中的方法
//调用服务的方法
public void call(View v) {
//通过内部代理对象,调用内部 类中的方法,实际上是调用了服务中的方法
binder.callMethodInService("张三丰", );
}
3. 远程服务通讯(服务运行在其他的应用程序里面,通过AIDL进行通讯)
4. 系统服务(服务运行在系统当中,通过getsystemService去调用)
Android四大组件--服务(Service)的更多相关文章
- Android四大组件之Service
Android四大组件之Service Android支持服务的概念,服务是在后台运行的组件,没有用户界面,Android服务可用有与活动独立的生命周期.Android支持两种类型的服务: 本地服务: ...
- 【Android开发日记】之入门篇(五)——Android四大组件之Service
这几天忙着驾校考试,连电脑都碰不到了,今天总算告一段落了~~Service作为Android的服务组件,默默地在后台为整个程序服务,辅助应用与系统中的其他组件或系统服务进行沟通.它跟Activity的 ...
- 入职小白随笔之Android四大组件——服务(Service)
Service Android多线程编程 当我们在程序中执行一些耗时操作时,比如发起一条网络请求,考虑到网速等原因,服务器未必会立刻响应我们的请求,此时我们就需要将这些操作放在子线程中去运行,以防止主 ...
- Android成长日记-Android四大组件之Service组件的学习
1.什么是Service? Service是Android四大组件中与Activity最相似的组件,它们都代表可执行的程序,Service与Activity的区别在于:Service一直在后台运行,它 ...
- Android四大组件之一 -- Service详解
相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序 ...
- Android四大组件:Service
前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍对Service进行全面介绍(基础认识.生命周期.使用和应用场景) 目录 目录 1. 基础知识 定义:服务,属于Androi ...
- Android四大组件之Service浅见
Service 是Android四大组件之一,可以在不显示界面的情况下在后台运行.还有一个作用是通过AIDL来实现进程间通信. Service的启动方式 Service的启动方式有两种,startSe ...
- Android 四大组件之service与Broadcast
Android 四大组件之一:service: Service有五个生命周期:onCreat,onStartCommand, onBind,onUnbind, onDestroy 主要有绑定和非绑定两 ...
- Android四大组件之一Service介绍-android学习之旅(十二)
基本概念: service是android四大组件之一,运行在后台执行耗时操作,并不提供用户界面.其他组件如acticity可以通过startService启动该组件,也可以通过bindService ...
随机推荐
- OpenSSH服务及其相关应用
远程登录工具: telnet,TCP/23:认证明文,数据传输明文,不够安全,所以出现了ssh ssh:Secure SHell,TCP/22,刚开始免费,后来商业化了,所以出现了Openssh,这个 ...
- C#——Socket
最近公司让我搞个socket小程序(服务端). 主要的功能:客户端发字符串到服务端,服务端接收后在界面上显示. 参照了网上许多代码,自己从中修改整理代码. public Form4() { Initi ...
- Delphi XE7的安卓程序如何调用JAVA的JAR,使用JAVA的类?
本文使用工具和全部源码下载: http://download.csdn.net/detail/sunylat/8190765 为什么我们要在Delphi XE7的安卓程序调用JAVA的JAR,使用JA ...
- MVC框架入门准备(二) - 语言包类与工厂模式
语言包类: 相关配置项 LANG_FOLDER : 语言包目录名,默认为Lang LANG_AUTO : 自动识别语言,默认为true DEFAULT_LANG : 默认语言,默认为zh-cn方法 取 ...
- 【ocp-12c】最新Oracle OCP-071考试题库(47题)
47.(10-6)choose two You need to calculate the number of days from 1st January 2007 till date. Dates ...
- centos7安装nginx(自定义安装文件夹)
一.安装所需要的依赖软件 1.gcc:nginx编译依赖gcc环境 #yum install gcc-c++ 2.pcre:(Perl Compatible Regular Expressions)是 ...
- 【文文殿下】浅谈KMP算法next数组与循环节的关系
KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...
- Centos安装Ruby2.2.3
升级软件包版本 (PS:我没有升级,一是太慢了,二是不知道更新完之后是否会影响其他的应用) #升级所有包,改变软件设置和系统设置,系统版本内核都升级 yum -y update #升级所有包,不改变软 ...
- springMVC和Struts异同
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring ...
- rpm小结
包括安装.卸载.升级.查询.校验.数据库维护 一. 安装: 常用方法:rpm -ivh 包名 ,其中“i”表示安装, "v"表示显示安装过程,“h"表示以#显示程 ...