似乎在服務和活動之間交換數據的常用方式是通過處理程序或消息。但是,如果我正在一個活動中啓動一個服務,並且我在同一個進程中實現了這個服務,那麼爲什麼我不能訪問他們的共享數據,因爲它們在相同的地址空間中運行?這是否影響到基本上有兩類(活動和服務)?如果沒有,如何訪問其他數據字段?在服務和活動之間共享數據
如果他們甚至運行在相同的線程(UI)中,同步不再是問題,我只是想知道在這種情況下是否有更簡單的方式來共享數據。謝謝。
似乎在服務和活動之間交換數據的常用方式是通過處理程序或消息。但是,如果我正在一個活動中啓動一個服務,並且我在同一個進程中實現了這個服務,那麼爲什麼我不能訪問他們的共享數據,因爲它們在相同的地址空間中運行?這是否影響到基本上有兩類(活動和服務)?如果沒有,如何訪問其他數據字段?在服務和活動之間共享數據
如果他們甚至運行在相同的線程(UI)中,同步不再是問題,我只是想知道在這種情況下是否有更簡單的方式來共享數據。謝謝。
是的,在這種情況下有一個更簡單的方法。 建立綁定時,您可以將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();
}
我認爲發送意圖應該工作。
Intent in = new Intent(youractivity.this,YourService.class); //這裏你可以使用 // putExtra方法 startService(in);
在此之後,在該服務中,您可以收到您從該活動發送的值。 我認爲這與我們之間的活動相似:) 希望它能起作用。
的培訓相關的代碼片斷,然後如何從服務活動傳遞價值? –
那麼如何訪問(傳遞)它們之間的變量? –
你是什麼意思?您可以調用服務的方法。 – kupsef
是的,但我的意思是一旦服務中的價值發生變化,我應該能夠得到它。像監控服務 –