绑定服务

绑定服务

右边部分就是绑定服务的运行过程

这样绑定的目的就是服务绑定者调用服务的方法,在我的样例里就是体现为服务访问者调用服务的show()方法

来张效果图吧

分析: 

1、第一步还是继承服务类

 1 package fry;
 2
 3 import java.io.FileDescriptor;
 4
 5 import android.app.Service;
 6 import android.content.Intent;
 7 import android.os.Binder;
 8 import android.os.IBinder;
 9 import android.os.IInterface;
10 import android.os.Parcel;
11 import android.os.RemoteException;
12 import android.util.Log;
13
14 public class myService extends Service{
15
16     /**
17      * 当绑定这个服务的时候调用
18      */
19     @Override
20     public IBinder onBind(Intent arg0) {
21         Log.d("fanfan", "onBind");
22         return new MyServiceBinder();
23     }
24     /**
25      * 当解除绑定这个服务的时候调用
26      */
27     @Override
28     public boolean onUnbind(Intent intent) {
29         Log.d("fanfan", "onUnbind");
30         return super.onUnbind(intent);
31     }
32     /**
33      * 当重新绑定这个服务的时候调用
34      */
35     @Override
36     public void onRebind(Intent intent) {
37         Log.d("fanfan", "onRebind");
38         super.onRebind(intent);
39     }
40
41     /**
42      * service被创建后调用
43      */
44     @Override
45     public void onCreate() {
46         Log.d("fanfan", "onCreate");
47         super.onCreate();
48     }
49
50     /**
51      * service被start后调用
52      */
53     @Override
54     public int onStartCommand(Intent intent, int flags, int startId) {
55         Log.d("fanfan", "onStartCommand");
56         return super.onStartCommand(intent, flags, startId);
57     }
58
59     /**
60      * service被停止后调用
61      */
62     @Override
63     public void onDestroy() {
64         Log.d("fanfan", "onDestroy");
65         super.onDestroy();
66     }
67
68     public void show(){
69         Log.d("fanfan", "show");
70     }
71
72     /**
73      * 中介
74      * @author Fry
75      *
76      */
77     public class MyServiceBinder extends Binder{
78         public void show(){
79             myService.this.show();
80         }
81
82     }
83
84
85 }

2、第二步的话就是配置服务

 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 2     package="com.example.bindservice"
 3     android:versionCode="1"
 4     android:versionName="1.0" >
 5
 6     <uses-sdk
 7         android:minSdkVersion="8"
 8         android:targetSdkVersion="19" />
 9
10     <application
11         android:allowBackup="true"
12         android:icon="@drawable/ic_launcher"
13         android:label="@string/app_name"
14         android:theme="@style/AppTheme" >
15         <activity
16             android:name="fry.MainActivity"
17             android:label="@string/app_name" >
18             <intent-filter>
19                 <action android:name="android.intent.action.MAIN" />
20
21                 <category android:name="android.intent.category.LAUNCHER" />
22             </intent-filter>
23         </activity>
24         <activity android:name="fry.Activity01" android:exported="true"></activity>
25
26         <service android:name="fry.myService">
27
28         </service>
29
30     </application>
31
32 </manifest>

3、第三步就是绑定服务

 1 package fry;
 2
 3 import com.example.bindservice.R;
 4
 5 import fry.myService.MyServiceBinder;
 6 import android.app.Activity;
 7 import android.content.ComponentName;
 8 import android.content.Context;
 9 import android.content.Intent;
10 import android.content.ServiceConnection;
11 import android.os.Bundle;
12 import android.os.IBinder;
13 import android.util.Log;
14 import android.view.View;
15
16 public class Activity01 extends Activity{
17     private ServiceConnection conn;
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         // TODO Auto-generated method stub
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity01);
23         conn=new ServiceConnection(){
24             /**
25              * 当服务访问者与服务绑定成功后调用
26              */
27             @Override
28             public void onServiceConnected(ComponentName arg0, IBinder service) {
29                 Log.d("fanfan", "onServiceConnected");
30                 MyServiceBinder binder=(MyServiceBinder)service;
31                 //实现了访问者调用服务者的方法
32                 binder.show();
33             }
34             /**
35              * 当service崩溃或被系统强制杀死后调用
36              */
37             @Override
38             public void onServiceDisconnected(ComponentName arg0) {
39                 Log.d("fanfan", "onServiceDisconnected");
40             }
41
42         };
43     }
44
45     public void onClick(View view){
46         Intent intent=new Intent();
47         intent.setClass(this, myService.class);
48         switch(view.getId()){
49         case R.id.btn_bind://绑定服务
50             bindService(intent, conn, Context.BIND_AUTO_CREATE);
51             break;
52         case R.id.btn_unbind://解绑服务
53             unbindService(conn);
54             break;
55         }
56     }
57 }
时间: 2024-08-09 09:37:45

绑定服务的相关文章

绑定服务学习

绑定服务主要是其他组件绑定服务(比如活动),然后发送请求,接收返回.这个服务主要是作为其他组件的佣人,不会再后台无限 地运行.个人认为关键要学习的是如何绑定以及服务和组件之间的通信. 如何绑定到服务 一个绑定的服务是Service类的实现,允许其他组件绑定和他通信.要为服务提供绑定,必须实现onBind回调方法.这个方法返回IBinder, 定义了客户端可以和服务通信的程序接口. 客户端可以调用bindService绑定到service上,要这么做必须提供ServiceConnection的实现

绑定服务调用本地服务中的方法

如果想调用服务中的方法, 通过startService()是做不到的, 这时需要用bindService来解决. 下面的demo是在Activity中调用Service中的自定义方法---methodInService 这个demo可以解决在项目开发中调用service里的数据. 这里在service中使用到了代理模式.这是为了,给service组件和activity组件中间添加一个中间人. 通过代理来传递数据.也就是binder对象.这个代理就是接口IService Service中的代码如下

绑定服务调用远程服务中的方法

在Andorid平台中,各个组件运行在自己的进程中,他们之间是不能相互访问的,但是在程序之间是不可避免的要传递一些对象,在进程之间相互通信.为了实现进程之间的相互通信,Andorid采用了一种轻量级的实现方式RPC(Remote Procedure Call 远程进程调用)来完成进程之间的通信,并且Android通过接口定义语言(Andorid Interface Definition Language ,AIDL)来生成两个进程之间相互访问的代码,例如,你在Activity里的代码需要访问Se

使用绑定服务实现一个简单的音乐播放器

效果 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:

绑定服务-----------binderService TimerTask的使用

绑定服务 服务中通过定义Binder对象的子类让这个子类成为桥梁   在onBind()中返回子类对象 这样就可以在activity中调用这个子类的方法 在Activity中通过ServiceConnection获取这个对象并向下转型为该子类对象 y与Activity绑定的服务当Activity结束的时候服务也会跟着结束 timer.cancel()会结束timerTask中的所有任务 NotifyManager.cancel(2)  2是对应的通知的id 会结束对应的通知 1 import a

绑定服务抽取接口

示例代码 简易的播放器: A. 写一个接口,在接口中写一个要暴露出去的方法 B. 让服务里的内部类实现这个接口 C. 在activity的连接成功后,强转为接口类型 D. 调用接口中的方法,实际上调用的时接口的实现类服务里的内部类里的方法 import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.Binder; import andr

adnroid四大组件之Service(5) 绑定服务,数据通信-IBinder

绑定服务: 第一步:创建一个服务类,实现onBind() 方法, 返回一个IBinder对象, 这个对象定义了与服务通信的接口,客户端接收到这个IBinder,与服务进行 通信.  IBinder的实现类通过一个 方法用来获取服务,和onTransact方法 与客户端进行通信. 第二步:在清单文件注册服务<service>  <service android:name="com.example.bindservicedemo.BindService"></

android之绑定服务调用服务的方法

public class MainActivity extends Activity { private music.MyBinder mm;//在activity里面得到服务ibinder对象的引用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public v

Xamarin.Android广播接收器与绑定服务

一.前言 学习了前面的活动与服务后,你会发现服务对于活动而言似乎就是透明的,相反活动对于服务也是透明的,所以我们还需要一中机制能够将服务和活动之间架起一座桥梁,通过本节的学习,你将会学到广播与绑定服务,这两种方式恰恰是解决上面问题的关键. 二.简单的广播接收器 实现一个最简单的广播接收器需要继承BroadcastReceiver类,并且还要实现OnReceive方法,我们可以在项目中新建一个MainReceiver类,然后写入如下代码: 1 public class MainReceiver :