Android之service篇(一)本地service
来源:互联网 发布:域名模板是什么 编辑:程序博客网 时间:2024/06/10 15:31
Android中的Service是运行在后台的东西,最好的例子就是当你把播放器退出后,音乐都可以在后台播放。所以是没有界面的。
Service分为两种:
1、本地服务:本地服务用于程序内部,可以用startservice启动服务,用stopservice停止服务,在服务内部可以使用stopSelf或stopSelfResult来停止自己,无论调用了多少次startservice,都只需要调用一次stopService来停止service
2、远程服务:远程服务用于android系统内部的应用程序之间。可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服务。远程服务需要用bindService方法建立连接,并启动,调用unbindService关闭连接。多个客户端可以绑定至同一个服务。
提供给可被其他应用复用,比如定义一个天气预报服务,提供与其他应用调用即可。
那么先来看Service的生命周期吧:如图:
我们可以定义一个本地服务继承Service,然后在这个服务里播放媒体播放器或者记录地理位置变化。通常有时候我们的Service要与Activity交互,那么可以可以定义一个内部类,返回这个Service,当然我们要考虑到如果是以绑定方式启动服务,那么内部类可以定义为继承Binder,然后返回本地服务,主要代码如下:
public class MyService extends Service { private IBinder binder=new MyService.LocalBinder(); @Override public IBinder onBind(Intent intent) { return binder; } MediaPlayer mediaPlayer=null; @Override public void onCreate() { //这里可以启动媒体播放器 // if(mediaPlayer==null) // mediaPlayer=MediaPlayer.create(this, uri); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("onStartCommand"); returnsuper.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); System.out.println("onDestory"); } //定义内容类继承Binder public class LocalBinder extends Binder { MyServicegetService(){ returnMyService.this; } }}
在类LocalBinder中的getService方法中是可以返回这个服务的,然后就可以在Activity中调用服务中的公用方法了。
Service有两种启动方式:
1、startservice
//启动服务
Intent intent = new Intent();intent.setClass(MainActivity.this,MyService.class);startService(intent);
2、bindservice
Intent intent = newIntent(this,MyService.class);MyService myService =null;bindService(intent, new ServiceConnection(){ @Override publicvoid onServiceDisconnected(ComponentName name) { //而在服务断开时候会调用onServiceDisconnected方法,我们可以清理一些服务资源 System.out.println("onServiceDisconnected"); myService= null; } @Override publicvoid onServiceConnected(ComponentName name, IBinder service) { //调用bindService方法启动服务时,如果服务器需要与Activity交互 //则可以通过onBind方法返回IBinder并返回当前本地服务 System.out.println("onServiceConnected"); myService= ((MyService.LocalBinder)service).getService(); myService.test_fun(); }},Context.BIND_AUTO_CREATE);
在绑定服务的时候,需要一个服务连接对象,ServiceConnection,服务一旦连接,就会调用onServiceConnected方法,我们可以在这个方法里面返回我们的本地服务对象,具体看代码;而在服务断开时候会调用onServiceDisconnected方法,我们可以清理一些服务资源。
- Android之service篇(一)本地service
- Android四大组件之Service(一)本地服务
- Android Service之本地 Service 例子
- android之service(一)
- Android之本地Service(LocalService)
- Android Service之本地服务
- Android之Service一
- Android之Service(一)
- Service(一、本地服务)
- Android基础篇之Service(一) - Service是什么
- Android之Service用法(一)
- Android基础系列之Service(一)
- android基础学习之Service(一)
- Android之Service(一):服务简介
- Android初学之Service(一)
- Android进阶之(Service详解一)
- Android之Service详解(一)
- Android四大组件之Service(一)
- 查询硬件信息
- maven成功技术文档
- GCD (Grand Central Dispatch)
- 各操作系统tar命令排除指定文件方式汇总
- git工具
- Android之service篇(一)本地service
- Json详解
- 我的html成长记
- go for android编译指南
- 【CODEFORCES】 B. Inbox (100500)
- 【数据结构第二周】线性表知识点整理
- Androi UI 详解之ViewAnimator(ViewSwitcher,ImageSwitcher,TextSwitcher,ViewFlipper)
- UVa #225 Golygons (习题7-2)
- centos/ubuntu jenkins.war 自启动脚本,Linux启动停止jar包的运行案例