2014-05-18 133 views
1

似乎在服務和活動之間交換數據的常用方式是通過處理程序或消息。但是,如果我正在一個活動中啓動一個服務,並且我在同一個進程中實現了這個服務,那麼爲什麼我不能訪問他們的共享數據,因爲它們在相同的地址空間中運行?這是否影響到基本上有兩類(活動和服務)?如果沒有,如何訪問其他數據字段?在服務和活動之間共享數據

如果他們甚至運行在相同的線程(UI)中,同步不再是問題,我只是想知道在這種情況下是否有更簡單的方式來共享數據。謝謝。

回答

1

是的,在這種情況下有一個更簡單的方法。 建立綁定時,您可以將IBinder轉換爲您的服務類型。

這裏是 http://developer.android.com/reference/android/app/Service.html

private LocalService mBoundService; 

private ServiceConnection mConnection = new ServiceConnection() { 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     // This is called when the connection with the service has been 
     // established, giving us the service object we can use to 
     // interact with the service. Because we have bound to a explicit 
     // service that we know is running in our own process, we can 
     // cast its IBinder to a concrete class and directly access it. 
     mBoundService = ((LocalService.LocalBinder)service).getService(); 

     // Tell the user about this for our demo. 
     Toast.makeText(Binding.this, R.string.local_service_connected, 
       Toast.LENGTH_SHORT).show(); 
    } 
+0

那麼如何訪問(傳遞)它們之間的變量? –

+0

你是什麼意思?您可以調用服務的方法。 – kupsef

+0

是的,但我的意思是一旦服務中的價值發生變化,我應該能夠得到它。像監控服務 –

0

我認爲發送意圖應該工作。

Intent in = new Intent(youractivity.this,YourService.class); //這裏你可以使用 // putExtra方法 startService(in);

在此之後,在該服務中,您可以收到您從該活動發送的值。 我認爲這與我們之間的活動相似:) 希望它能起作用。

+0

的培訓相關的代碼片斷,然後如何從服務活動傳遞價值? –