Activity和service的两种绑定方法

来源:互联网 发布:万方数据库账号密码 编辑:程序博客网 时间:2024/05/29 04:26
要知道如果调用函数startService方法,那么即使你的程序退出了,但是Service依然运行在后台;也就是说此时想要停止service必须调用stopService方法。    现在我们把Activity与Service绑定在一起,那就是Service要随着程序的退出而终止,此时调用的方法为bindService方法,方法如下:    A. 编写需要运行在后台的类继承自android.app.Service。      public class MyService extends Service {        //服务生命周期 创建,开始,销毁         /**            * 创建          */         @Override       public void onCreate() {        // TODO Auto-generated method stub          super.onCreate();          Log.d("info", "Service Create");         }         /*            * 开始            * (non-Javadoc)            * @see android.app.Service#onStart(android.content.Intent, int)          */       @Override         public void onStart(Intent intent, int startId) {          // TODO Auto-generated method stub            super.onStart(intent, startId);            Log.d("info", "Service Start");           }           /**                * 销毁             */        @Override          public void onDestroy() {          // TODO Auto-generated method stub            super.onDestroy();            Log.d("info", "Service Destroy");           }            /**              * 当Service与Activity成功绑定时调用这个方法(non-Javadoc)            * @see android.app.Service#onBind(android.content.Intent)            */         @Override           public IBinder onBind(Intent arg0) {            Log.d("info","Service Bind Success");            return null;            }           /**              * 重新绑定            */         @Override           public void onRebind(Intent intent) {               super.onRebind(intent);            Log.d("info","Service ReBind Success");           }           /**              * 取消绑定            */         @Override           public boolean onUnbind(Intent intent) {             Log.d("info","Service Unbind Success");            return super.onUnbind(intent);            }       }     B.  在AndroidManifest.xml中配置<service>标签      <service android:name=".MyService" android:enabled="true" ></service>         C. 绑定服务:      (1) 通过使用Activity的bindService(Intent service,ServiceConnection conn,int flags)完成           由该方法的第二个参数可以确定第二步要做什么      (2) 编写类实现ServiceConnection 接口          class MyServiceConnection implements ServiceConnection            {            @Override            public void onServiceConnected(ComponentName arg0, IBinder arg1) {             Log.d("info", "Service Connection Success");             //成功连接服务,该方法被执行。在该方法中可以通过IBinder对象取得onBind方法的返回值,一般通过向下转型            }            @Override            public void onServiceDisconnected(ComponentName arg0) {             // TODO Auto-generated method stub             Log.d("info", "Service Connection Filed");             //连接失败执行            }               }        (3)使用             class BtnClick implements OnClickListener              {              @Override            public void onClick(View arg0) {             Intent intent = new Intent(Main.this,MyService.class);                MyServiceConnection myServiceConnection = new MyServiceConnection();             switch (arg0.getId()) {               case R.id.btnStart:                          Main.this.startService(intent);                  break;               case R.id.btnStop:                      Main.this.stopService(intent);                  break;               case R.id.btnBind:                   Main.this.bindService(intent,myServiceConnection ,Context.BIND_AUTO_CREATE);                   break;                 case R.id.btnUnBind:                    //ServiceConnection必须是全局变量否则此处报错                   Main.this.unbindService(myServiceConnection );                    break;               default:                   break;               }               }                 } ***开启service有两种方法,一种startService,另一种是bindService。如果两种方法同时使用的话,不论是先启用startService先还是启用bindService先,都需要先等待解除绑定服务再能调用stopService方法,程序才会自动回调destroy。不论是先启用startService先还是启用bindService先,然后再退出程序,以startService启动的服务忍然需要当程序再次启动后调用stopService停止服务。

1 0