Skip to content

Service组件

长期运行在后台

类型(不互斥,与实现的回调方法有关

  • 启动服务:start service,程序内部,执行单个操作,不与其它组件交互信息

    回调方法:IBinder onBind(Intent intent),调用bindService()时执行

  • 绑定服务:bind service,多程序之间,允许与其它组件和服务交换信息。多个组件可以绑定到同一个服务上

    回调方法:int onStartCommand(Intent intent, int flags,int startID),调用startService()时调用

其它回调方法

  • onCreate():首次创建调用
  • onDestroy():销毁时调用
  • onUnbind():绑定的客户端全部解绑时调用

生命周期

image-20260610085823222

创建与注册

  1. 自定义继承Service的类,重写onBind()方法(无论是绑定还是启动服务都要写

    1
    2
    3
    4
    5
    6
    7
    public class MyService extends Service {
       @Override
       public IBinder onBind(Intent intent) {
           //如果后续作为启动服务则只需要写:
            return null;
        }
    }
    
  2. 在AndroidManifest.xml文件中注册Service

    在\<application>节点中添加一个<service android:name=".Service类名"/>标签。

启动与停止

  • 在Activity中启动一个Service
    Intent intent=new Intent(当前Activity.this,要启动的Service.class);
    startService(intent);
    
  • 在Activity中停止一个Service
    Intent intent=new Intent(当前Activity.this,要停止的Service.class);
    stopService(intent);
    

IntentService

android不允许在主线程进行耗时操作,只能使用新的线程执行。一种实现是使用IntentService,它每次都会使用一个新的工作线程来处理全部启动请求