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

绑定服务

2017年09月11日 移动开发 ⁄ 共 3480字 ⁄ 字号 暂无评论

绑定服务

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

 

这样绑定的目的就是服务绑定者调用服务的方法,在我的样例里就是体现为服务访问者调用服务的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 }

 

给我留言

您必须 [ 登录 ] 才能发表留言!

×