现在的位置: 首页 > 移动开发 > 正文

Android Service使用方法有哪些

2020年01月07日 移动开发 ⁄ 共 2196字 ⁄ 字号 评论关闭

  Service作为Android四大组件之一,承载着重要的作用,同时,熟悉Service也会为理解Binder打下重要的基础,这里是我初学Android时做的关于Service的笔记,现在总结到这篇文章中。

  安卓组件是什么意思

  android中的service与Windows中的服务类似,一般没有用户界面,运行在后台,可以执行耗时的操作,是安卓四大组件之一。其他组件可以启动service,并且当用户切换另外的场景,service可以一直在后台运行。 服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,访问(启动)者与服务之间没有关连,即使访问(启动)者退出了,服务仍然运行。

  采用Context.startService()方法启动服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。 使用bindService()方法启用服务,访问者与服务绑定在了一起,访问者一旦退出,服务也就终止。 service的运行是单例模式,只会实例化一次,开启一次之后再开启还是之前的那个对象,不会再新实例化。 Service和其他的应用组件一样,运行在进程的主线程中。这就是说如果service需要很多耗时或者阻塞的操作,需要在其子线程中实现。

  创建服务步骤

  创建一个类,继承servicepublic class MyService extends Service {

  //必须实现方法,方法返回IBinder对象,应用程序可通过该对象与Service组件通信

  public IBinder onBind(Intent intent) {

  Log.i("Other", "MyService.onBind");

  return null;

  }

  //生命周期方法,当Service第一次创建后将立即回调该方法

  public void onCreate() {

  super.onCreate();

  Log.i("Other", "MyService.onCreate");

  }

  //当Service被关闭之前将回调该方法

  public void onDestroy() {

  super.onDestroy();

  Log.i("Other", "MyService.onDestroy");

  }

  //每次客户端调用startService(Intent)方法启动该Service时都会回调该方法

  public int onStartCommand(Intent intent, int flags, int startId) {

  Log.i("Other", "MyService.onStartCommand");

  return super.onStartCommand(intent, flags, startId);

  }

  //当该Service上绑定的所有客户端都断开连接时将回调该方法

  public boolean onUnbind(Intent intent) {

  Log.i("Other", "MyService.onUnbind");

  return super.onUnbind(intent);

  }

  在配置清单中注册该service

  启动服务

  服务不能自己启动,需要手动启动,有两种方法启动1、Context.startService(Intent)访问者与服务没有关联,即使访问者退出,服务仍然运行,若服务没启动:onCreate()-->onStartCommand(),如服务已经启动,直接调用onStartCommand()通过Context.stopService(Intent)关闭服务,调用此方法,此时若服务没启动:调用stopService()方法,service不做任何操作,若服务启动:调用onDestory()方法2、Context.bindService()访问者与服务绑定在一起,访问者一旦退出,服务终止? ? 以上创建了一个Service,只是重写了周期方法,若希望Service组件做某些事情,那么只要在onCreate()或onStartCommand()方法中定义相关义务代码即可

  绑定本地Service并与之通信(进程内部绑定服务)

  如果service与访问者需要进行方法调用或数据交换,则应该使用bindService()和unbindService()方法绑定、解绑服务。访问者与服务通过IBinder对象联系在一起,bindService()方法调用时,需要Intent,ServiceConnection和flag参数,其中serviceConnetion对象用于监听访问者与service之间的连接情况,用于接收服务onBind()方法返回的IBinder对象,IBinder中包含service传给调用者的数据。当连接成功时,serviceConnection()将回调方法onServiceConnected(Component Name,IBinder service);IBinder对象会传入其中。

抱歉!评论已关闭.