Service 介绍

Service 介绍

Service和Activity是不同的,Acticity,显示图形用户界面,而Service是不可见的--如执行intent的查找,出来数据,更新ContentProvider,激活Intent和触发Notification。Activity在它的生命周期内定地启动,停止和重新创建,而service则设计为长的生命周期,它是用来执行一些持续的,可能耗时的操作。

 

Service的启动和停止,控制是通过其他应用程序来实现的,包括Activity,Broadcase Receive,其他Service。

运行中的Sercice具有比处于非激活的Service或者与不可见的(停止)的Activity要高的优先级,所以他被运行的是资源管理终止的机会要小点。

 

1.启动Service

要定义一个Service,需要创建一个扩展Service的新类。需要重写onCreate和onBind方法

 

public void MyService extends service{

       @Override
       public void onCreate(){
       super.onCreate;
    }
	@Override
	// 绑定service要实现onBind方法,对正在运行的Sverice进行发放调用
	public IBinder onBind(Intent intent) {
		return binder;
	}
}

 当创建service之后需要在清单文件中注册

 

2.执行一个Service并控制它的重新启动

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
                startBackgroundTask(intent,staartId);
		return super.onStartCommand(intent, flags, startId);
	}

 3.启动和停止Service

			//用intent启动一个service
			Intent intent=new Intent();
			intent.setClass(MainActivity.this, MyServece.class);
			this.startService(intent);

                        //停止Service
                        stopService(new Intent(this,MyService.class));
                        

 4.将Service绑定要Activity

允许Service和Activity绑定,这样能够获得更加详细的接口。要让一个Service支持绑定,需要实现onBind方法,并返回被绑定的当前实列

	@Override
	// 绑定service要实现onBind方法,对正在运行的Sverice进行发放调用
	public IBinder onBind(Intent intent) {
		return binder;
	}

	class ControlBinder extends Binder {
		// 停止
		public void pause() {
			player.pause();
		}
}

 Service和其他组件的连接表示为一个ServiceConnetion。

要想将一个Service与其他组件绑定,需要实现一个新的ServiceConnection,建立了一个连接后,就可以重写onServiceConnection和onServiceDisconnected方法获得对Service的实列的引用。

	// 创建链接对象获得service的实例应用
	public ServiceConnection conn = new ServiceConnection() {

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			binder = (ControlBinder) service;
			th.start();
		}

		@Override
		public void onServiceDisconnected(ComponentName name) {

		}
	};

 

在Kubernetes中,Service是一种抽象概念,它定义了一组Pod的逻辑集合和一种可以访问它们的策略,为Pod提供了稳定的网络端点。以下是详细介绍: ### 作用 - **服务发现**:Kubernetes中的Pod是有生命周期的,可能会动态创建、销毁。Service为一组具有相同功能的Pod提供了一个固定的IP地址和DNS名称,使得其他Pod可以通过这个固定的地址来访问它们,无需关心具体Pod的IP地址变化。 - **负载均衡**:Service可以将请求均匀地分发到后端的多个Pod上,从而实现负载均衡,提高应用的可用性和性能。 ### 类型 - **ClusterIP**:默认类型,服务只能在集群内部访问,通过分配一个集群内部的虚拟IP地址来实现。 ```yaml apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376 ``` - **NodePort**:在每个节点上开放一个端口,外部可以通过节点的IP地址和该端口访问服务。 ```yaml apiVersion: v1 kind: Service metadata: name: my-service spec: type: NodePort selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376 nodePort: 30007 ``` - **LoadBalancer**:使用云提供商的负载均衡器,将流量导向服务。 ```yaml apiVersion: v1 kind: Service metadata: name: my-service spec: type: LoadBalancer selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376 ``` - **ExternalName**:将服务映射到一个外部域名。 ```yaml apiVersion: v1 kind: Service metadata: name: my-service namespace: prod spec: type: ExternalName externalName: my.database.example.com ``` ### 工作原理 - **标签选择器**:Service通过标签选择器(Label Selector)来关联一组Pod。只有带有指定标签的Pod才会被纳入到Service的负载均衡池中。 - **Endpoint对象**:Kubernetes会为每个Service创建一个对应的Endpoint对象,该对象记录了所有匹配标签选择器的Pod的IP地址和端口信息。当请求到达Service时,会根据Endpoint对象中的信息将请求转发到后端的Pod上。 ### 创建和管理 - **创建**:可以使用`kubectl create -f service.yaml`命令来创建一个Service,其中`service.yaml`是包含Service定义的YAML文件。 - **查看**:使用`kubectl get services`命令查看集群中的所有Service。 - **删除**:使用`kubectl delete service <service-name>`命令删除指定的Service
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值