Service简述
Service是运行在后台的,没有界面的,用来处理耗时比较长的。Service不是一个单独的进程,不是一个单独的线程。
Service有两种类型:
本地服务(Local Service):用于应用程序内部
远程服务(Remote Sercie):用于android系统内部的应用程序之间
本地服务用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单
开线程后台执行,这样用户体验比较 好。
远程服务可被其他应用程序复用,比如天气预报服务,其他应用程序不需要再写这样的服务,调用已有的即可。
服务的生命周期
Service的启动方法
服务不能自己运行,需要通过调用Context.startService() 或 Context.bindService()方法启动服务。这两个方法都可以启
动Service,但是它们的使用场合有所不同。
使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。
使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同生,但
求同死”的特点。
1 通过startService()
onCreate --> onStartCommand()--> onDestroy()
startService(): onCreate -->onStartCommand()
stopService:onDestroy()
采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法.
接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次
创建服务,但会导致多次调用onStart()方法。
采用startService()方法启动的服务,只能调用Context.stopService()方法结 束服务,服务结束时会调用onDestroy()方
法。
2 通过bindService()
onCreate()-->onBind()--> onUnbind()-->onDestroyed()
bindService():调用者和Service绑定在一起
unbindService(): onUnbind()-->onDestroyed()
采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,
接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方
法,接着调用onDestroy()方法。
如调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说
onCreate()和onBind()方法并不会被多次调用)。
如调用者希望与正在绑定的服务解除绑定,可调用unbindService()方法,调用该方法会导致系统调用的 onUnbind()--
>onDestroy()方法.
3 bindService方法的说明
bindService(Intent service,Service Connection conn,int flags):
Service:通过Intent指定要启动的service
Conn:一个Service Connection对象,该对象用来监听访问者与service的连接情况。
如果连接成功则会回调该对象的:onServiceConnected()方法。
当断开连接就回调该对象的:onServiceDisconnected()方法
Flags:指定绑定是否自动创建service,值为0或BIND_AUTO_CREATE
onServiceConnected(ComponentName name, IBinder service): service:通过这个Ibinder对象实现与service通信,在
开发service类时,该类必须实现一个Ibinder onBind(Intent intent)的方法,该方法返回的Ibinder对象就会传递给service
参数,这样访问者就可以和service通信了
startService() 实例代码如下:
Activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent=new Intent("cn.edu.zwu.tel.lgs001");
}
public void onStartClick(View view)
{
startService(intent);
}
public void onStopClick(View view)
{
stopService(intent);
}
Service:
public class myService extends Service {
@Override
public IBinder onBind(Intent arg0) {
System.out.println("onBind mathod is called");
return null;
}
@Override
public void onCreate() {
System.out.println("onCreate mathod is called");
super.onCreate();
}
@Override
public void onDestroy() {
System.out.println("onDestroy mathod is called");
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("onStartCommand mathod is called");
return super.onStartCommand(intent, flags, startId);
// return START_STICKY;
}
@Override
public void onRebind(Intent intent) {
System.out.println("onRebind mathod is called");
super.onRebind(intent);
}
@Override
public boolean onUnbind(Intent intent) {
System.out.println("onUnbind mathod is called");
return super.onUnbind(intent);
}
}
AndroidManifest.xml:
<service android:name=".myService">
<intent-filter >
<action android:name="cn.edu.zwu.tel.lgs001"/>
</intent-filter>
</service>
bindService() 实例代码如下:
Activity:
private myService2 ms2;
private ServiceConnection conn=new ServiceConnection()
{
@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
ms2=((myService2.myBinder)arg1).getService();
textView.setText(ms2.setString());
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
ms2=null;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent2=new Intent("cn.edu.zwu.tel.lgs002");
textView=(TextView)findViewById(R.id.textId);
}
public void onBindClick(View view)
{
bindService(intent2, conn, Context.BIND_AUTO_CREATE);
}
public void onUnBindClick(View view)
{
unbindService(conn);
}
myService2:
public class myService2 extends Service {
private myBinder binder=new myBinder();
public class myBinder extends Binder
{
myService2 getService()
{
return myService2.this;
}
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return binder;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
return super.onStartCommand(intent, flags, startId);
}
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
return super.onUnbind(intent);
}
public String setString()
{
return "绑定了";
}
}
AndroidManifest.xml:
<service android:name=".myService2">
<intent-filter >
<action android:name="cn.edu.zwu.tel.lgs002"/>
</intent-filter>
</service>
分享到:
相关推荐
博文 http://blog.csdn.net/kasogg/article/details/49755845
我们在使用某些Android应用的时候,可能会发现安装了某应用以后,会有一些服务也会随之运行。而且,这些服务每次都会随着手机开机而启动。有的服务做的更绝,当用户在运行的服务中手动停止该服务以后,过了一段时间...
详见http://blog.csdn.net/huaxun66/article/details/52809989
Android Service完全解析,关于服务你所需知道的一切(上).html
此源码对应的是我的博客“Android Service完全解析,关于服务你所需知道的一切(上)”,经过测试完美运行,配合着博客和源码,能够快速理解Android中Service组件的工作原理
Android中Service的生命周期解析.pdf 学习资料 复习资料 教学资源
新版Android环境搭建与解析教程 pdf,以图文的方式讲解Android环境的搭建,然后对Android应用解析作一些介绍,包括Activity、Intent、IntentReceiver、Service、Content Provider等相关技巧的介绍。
Android_Blog_Demos 存储CSDN博客的一些源码...Android IntentService完全解析 当Service遇到Handler 详细 Android 高清加载巨图方案 拒绝压缩图片 ViewDragHelper实战 自己打造Drawerlayout Android UI性能优化实
manager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); params = SingleLayoutParams.getLayoutParams(); View lay = LayoutInflater.from(this).inflate(R.layout.mylinearlayout, ...
用百度地图做的定位和地址解析,源码 用的service来定位并回调,可能注释不太多,不过易懂.
《Android 11.0最新Framework解析.pdf》是一本针对Android 11.0系统框架的深入解析之作,旨在帮助读者全面理解和掌握Android 11.0框架的最新特性和实现机制。 本书首先概述了Android 11.0的整体架构和设计理念,...
简单分析了Android原生Music的源码结构 分析了歌曲的播放流程
主要介绍了Android的Service用法,很实用的功能,需要的朋友可以参考下
12.init脚本解析分析 13.init脚本执行和进程守护(1) 14.init脚本执行和进程守护(2) 15.android服务介绍与davlink启动 16.Zygote剖析与system_server启动 17.Zygote创建APP分析 18.zygote_load系统资源分析及优化 19....
8.3 如何以Proxy Object整合Android Service 8.4 Long operations 的解析与实作细节 8.5 RemoteException 的解析与实作细节 8.6 Handler 与 Message 的解析与实作细节 8.7 Error Handling 9.专题探讨 9.1 整合...
Android通过Webservices访问网络资源,解析返回来的数据,显示在组将上。
Android进阶初级:组件Widget/ 菜单Menu/ 布局Layout 详解 Xml解析(Pull/Dom/Sax)/JNI 解析SQL数据库原理, SQLit e /SharedPreferences/File详解 多媒体Audio/Video/Camera 详解 Android进阶高级:蓝牙/WIFI SMS/...
Service的跨进程通信实战 ...我们来看如何在Android中实现? PersonServer端实现 PersonServer端是服务的提供者,我们首先需要创建一个Service来提供该服务,并且需要该服务具备跨进程通信的能力,以便Client端进行
本文实例讲述了Android中DOM解析xml文件的方法。分享给大家供大家参考,具体如下: 一、在assets文件中写xml文件 <?xml version=1.0 encoding=UTF-8?> 李明 <age>30 李向梅 <age>25 二、在...
Android获取USB扫描枪扫描数据。Android 平板热插拔USB扫描枪应用场景多,在有界面如EditText时,扫描枪扫描内容自动输入到编辑框了,在...AccessibilityService不了解的同学看看http://www.jianshu.com/p/4cd8c109cdfb