2015-07-11 24 views
0

要與Service進行通信,bindService()和創建服務實例有什麼不同?爲什麼需要使用bindService()與服務進行通信?我很困惑。要與Service進行通信,bindService()與創建服務實例的區別是什麼?

(1)

public class BLEService extends Service { 
    private static BLEService sService; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     sService = this; 
    } 

    public static BLEService getInstance() { 
     return sService; 
    } 
} 

public class HeartRateActivity extends Activity { 
    private BLEService mBLEService; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mBLEService = BLEService.getInstance(); 
    } 
} 

(2)

public class BLEService extends Service { 
    private final IBinder mBinder = new LocalBinder(); 
    private BLEService mBLEService; 

    public class LocalBinder extends Binder { 
     public MyleService getServerInstance() { 
      return MyleService.this; 
     } 
    } 
} 

public class HeartRateActivity extends Activity { 
    private BLEService mBLEService; 
    private boolean mBounded; 

    @Override 
    protected void onStart() { 
     super.onStart(); 

     Intent mIntent = new Intent(this, BLEService.class); 
     bindService(mIntent, mConnection, BIND_AUTO_CREATE); 
    } 

    ServiceConnection mConnection = new ServiceConnection() { 
     public void onServiceDisconnected(ComponentName name) { 
      mBounded = false; 
      mBLEService = null; 
     } 

     public void onServiceConnected(ComponentName name, IBinder service) { 
      mBounded = true; 
      LocalBinder mLocalBinder = (LocalBinder)service; 
      mBLEService = mLocalBinder.getServerInstance(); 

     } 
    }; 

} 

感謝

編輯:在的onCreate服務刪除new運算符()

回答

0

你會實例化一個Service對象通過它的構造函數使用new關鍵字。服務旨在成爲一個長期運行的過程,並不一定與希望訪問該活動的活動的生命週期相關聯。因此,服務是您使用Intent向Android發信號通知您希望以與使用Intent對象相同的方式運行它們的信號,以表示您希望啓動新的活動。

使用.bindService()您可以向Android發出信號表明您要附加到正在運行的服務(並且如果它尚未運行,則隱式啓動該服務)。綁定後,您可以通過任何可用的接口與服務進行通信。

相關問題