第8章 Service基礎Activity與Service綁定


    要知道如果調用函數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停止服務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM