`

绑定Service

阅读更多

                    前者我们必须通过Activity调用onStop来关闭service,如果Activity不管他,小service会一直运行下去,我们希望的是将Activity与Service绑定,实现关闭Activity同时关闭service。

这里需要一个:

public ServiceConnection connect=new ServiceConnection(){

  @Override
  public void onServiceConnected(ComponentName arg0, IBinder service) {
   // TODO Auto-generated method stub
   try {
    System.out.println("###ServiceConnection Sucess,service is"+service.getInterfaceDescriptor());
   } catch (RemoteException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

};

来管理绑定和解除绑定

现在我们定义service代码:

public class MyService extends Service{
	
	private IBinder mybinder=new IBinder(){

		

		//取得接口描述信息
		public String getInterfaceDescriptor() throws RemoteException {
			// TODO Auto-generated method stub
			return "MyService.class";//返回service类名称
		}

		@Override
		public void dump(FileDescriptor arg0, String[] arg1)
				throws RemoteException {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void dumpAsync(FileDescriptor arg0, String[] arg1)
				throws RemoteException {
			// TODO Auto-generated method stub
			
		}

		@Override
		public boolean isBinderAlive() {
			// TODO Auto-generated method stub
			return false;
		}

		@Override
		public void linkToDeath(DeathRecipient arg0, int arg1)
				throws RemoteException {
			// TODO Auto-generated method stub
			
		}

		@Override
		public boolean pingBinder() {
			// TODO Auto-generated method stub
			return false;
		}

		@Override
		public IInterface queryLocalInterface(String arg0) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public boolean transact(int arg0, Parcel arg1, Parcel arg2, int arg3)
				throws RemoteException {
			// TODO Auto-generated method stub
			return false;
		}

		@Override
		public boolean unlinkToDeath(DeathRecipient arg0, int arg1) {
			// TODO Auto-generated method stub
			return false;
		}
		
	};
	//绑定时触发
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		System.out.println("service:onBind Intent"+intent);
		return mybinder;
	}
	//重新绑定时触发
	public void onRebind(Intent intent) {
		// TODO Auto-generated method stub
		System.out.println("service:onRebind Intent"+intent);
		super.onRebind(intent);
	}
	//接触绑定时触发
	public boolean onUnbind(Intent intent) {
		// TODO Auto-generated method stub
		System.out.println("service:onUnbind Intent"+intent);
		return super.onUnbind(intent);
	}
	//创建时触发
	public void onCreat(){
		System.out.println("service:onCreat ");
		super.onCreate();
	}
//	public void onCreate() {
//		System.out.println("****onCreate");
//		
//	}
//
//	@Override
//	//销毁时触发
	public void onDestroy(){
		System.out.println("****onDestroy");
	}
	//启动时触发
	public int onStartCommand(Intent intent,int flag,int startid){
		System.out.println("****onStart  Intent"+intent+"  flag "+flag+"  startid:"+startid);
		return Service.START_CONTINUATION_MASK;
	}

}

 

布局函数加两个按钮:

 <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="start"
        android:text="启动Service" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="stop"
        android:text="停止Service" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="Bind"
        android:text="启动绑定" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="Unbind"
        android:text="解除绑定" />

 

Activity:

public class MainActivity extends Activity {

	public ServiceConnection connect=new ServiceConnection(){

		@Override
		public void onServiceConnected(ComponentName arg0, IBinder service) {
			// TODO Auto-generated method stub
			try {
				System.out.println("###ServiceConnection Sucess,service is"+service.getInterfaceDescriptor());
			} catch (RemoteException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		@Override
		public void onServiceDisconnected(ComponentName arg0) {
			// TODO Auto-generated method stub
			System.out.println("###ServiceConnection Failure");
		}
		
	};
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	public void start(View v){
		MainActivity.this.startService(new Intent(MainActivity.this,MyService.class));
		
	}
    public void stop(View v){
    	MainActivity.this.stopService(new Intent(MainActivity.this,MyService.class));
		
	}
    public void Bind(View v){
    	MainActivity.this.bindService(new Intent(MainActivity.this,MyService.class)
    	,MainActivity.this.connect,Context.BIND_AUTO_CREATE);
    	
    }
    public void Unbind(View v){
    	MainActivity.this.unbindService(MainActivity.this.connect);
    }

	
}


 

按绑定:


接触绑定:



 

当我突然退出程序的时候:



 实例完成,大家课后可以深入思考一下service工作原理
 

 

  • 大小: 3.2 KB
  • 大小: 4.2 KB
0
0
分享到:
评论

相关推荐

    Activity绑定Service(Kotlin)

    要绑定Service,Activity需要实现`ServiceConnection`接口,并重写`onServiceConnected()`和`onServiceDisconnected()`方法。在`onCreate()`或`onResume()`中调用`bindService()`,传入Service的Intent和自定义的...

    浅析aidl过程和绑定service的过程(不会使用的撤).zip

    本篇文章将深入探讨AIDL的工作原理以及如何绑定Service,帮助开发者理解这两个关键概念。 **AIDL简介** AIDL是一种特殊的接口定义语言,允许不同进程间的Android组件进行通信。当一个应用需要与另一个应用的Service...

    android普通类绑定service

    2、针对对普通类绑定service进行测试 3、普通类可以绑定service,但是需要activity传入一个Contex参数 4、该测试可以将业务代码和activity或者service分离,实现程序更好的结构,提高代码可读性 5、欢迎大家一起讨论...

    android如何绑定service

    在本文中,我们将深入探讨如何在Android应用中绑定Service,这通常用于实现客户端-服务器通信,使得应用程序可以与Service进行交互、传递数据或控制Service的行为。 一、Service生命周期 在理解绑定Service之前,...

    Android绑定Service进行通信示例

    本文将深入探讨如何通过绑定Service来进行通信,这在需要与Service交互、获取Service状态或传递数据时非常有用。我们以"ConnectService"为例来详细讲解这个过程。 1. **Service基础概念** Service不同于Activity,...

    android播放器绑定Service

    总结起来,Android应用中的音乐播放器绑定Service,主要是为了实现后台持久播放以及Activity和服务之间的有效通信。Service负责处理音频播放逻辑,而Activity通过绑定Service来控制播放状态。使用`MediaPlayer`或`...

    BindService绑定Service播放音乐

    在本例中,我们关注的是通过`BindService`来绑定Service,以及如何利用BroadcastReceiver进行通信,以实现播放音乐的功能。 首先,`BindService`是Android系统提供的接口,允许一个组件(通常是Activity)与Service...

    Android绑定serviceDemo

    "Android绑定serviceDemo"是专门为演示如何使用bindService方法来启动并交互Service的实例。bindService不同于startService,后者主要用于启动一次性或周期性的任务,而bindService则更强调组件之间的绑定关系,允许...

    绑定本地Service并与之通信

    4. **启动和绑定Service**:在客户端(Activity或其他组件),我们使用bindService()方法启动并绑定Service。需要提供一个Intent来指定要绑定的Service,以及一个ServiceConnection对象,用于处理绑定成功或失败的回...

    最简洁的service和activity绑定

    在Android开发中,Service是应用程序组件之一,它在...务必注意,绑定Service后,记得在适当的时候解绑,以保持应用的正常运行和内存管理。在实际项目中,根据具体需求,可能还需要考虑线程同步、错误处理等复杂情况。

    Activity绑定Service

    绑定Service的过程涉及到创建一个Intent,指定要绑定的Service类,并通过bindService()方法进行绑定。以下是一个简单的示例: ```java Intent intent = new Intent(this, MyService.class); bindService(intent, ...

    android 绑定 service

    本文将深入探讨如何在Android中绑定Service,以及相关知识点。 首先,了解Service的基本概念。Service主要分为两种启动方式:startService()和bindService()。startService()用于启动一个Service并执行一次性任务,...

    App1绑定App2的Service并进行信息互传源码

    代码中包含同个应用程序间Service的...Server工程为Service所在的应用程序,Client工程为要绑定Service的应用程序,例子简单易懂,可配合http://blog.csdn.net/u013524014/article/details/50314477 中的介绍帮助理解。

    绑定本地和远程Service的Demo.zip

    - **绑定Service**:在需要使用Service的Activity中,通过`bindService()`方法来绑定Service,并在回调中获取到`IBinder`对象。 ```java Intent intent = new Intent(this, MyLocalService.class); bindService...

    绑定本地service并与之通讯

    5. **绑定Service**:通过Context的bindService()方法进行绑定,并提供一个实现了ServiceConnection接口的回调对象,用于处理连接成功和断开的情况。 ```java ServiceConnection connection = new ...

    Android 绑定service小demo

    `onServiceConnected()` 方法会在服务绑定成功后被调用,此时我们可以通过 `service` 参数访问服务的 `Binder` 对象,并调用其方法。当不再需要服务时,记得调用 `unbindService()` 来解除绑定: ```java // 解绑...

    android基础知识05:四大组件之service 02:远程调用实例程序

    服务端(server)包含了Service的实现以及AIDL接口的定义,而客户端(client)则包含调用服务端Service的方法和绑定Service的逻辑。 总结来说,远程调用Service是Android开发中处理跨进程通信的重要技术。通过AIDL...

    android Service 与Activity绑定

    - 绑定Service时,确保在Activity的onDestroy()中解绑,防止内存泄漏。 - 如果只是需要在后台执行一次性任务,优先考虑使用IntentService,因为它更易于管理和资源释放。 通过理解和掌握Service与Activity的绑定...

    service的启动和绑定

    3. **13.MusicPlayerDemo**:可能是结合启动和绑定Service的实例,用来演示如何控制后台音乐播放。它可能包含一个启动服务来持续播放音乐,同时允许客户端通过绑定来控制播放状态。 理解并熟练掌握Service的启动和...

    Service绑定的基础用法

    在ServiceProject这个项目中,你可能找到了如何创建、启动和绑定Service的示例代码。研究这些代码,结合上述理论知识,你将能更好地理解Service在Android应用中的作用和使用方式。通过实践,你可以熟练掌握Service...

Global site tag (gtag.js) - Google Analytics