2015-09-26 60 views
1

我知道綁定使用年限只有等到活動或任何組件需要它。 我們必須從onBind函數調用MyLocalBinder類。 這是爲什麼? 爲什麼我們不能直接調用它?爲什麼我們使用另一個繼承binder類的類來訪問BoundServices?

public class MyService extends Service { 

private final IBinder myBinder = new MyLocalBinder(); 

public MyService() { 
} 

@Override 
public IBinder onBind(Intent intent) { 

    return myBinder; 
} 

public String getCurrentTime(){ 

    SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss", Locale.UK); 
    return (df.format(new Date())); 
} 

public class MyLocalBinder extends Binder{ 

    MyService getService(){ 
     return MyService.this; 
    } 

} 
} 

回答

0

如果您使用的是相同的應用程序中調用的粘合劑則是訪問一些服務類的功能從樣活性的其他組件的方式。

如果您使用的粘合劑API的應用程序之間的調用,這意味着你想從你的應用程序中使用的遠程功能。由於兩個應用程序在其自己的進程中運行,活頁夾將像安全管道一樣工作。

你不能直接調用MyBinder類,你不能直接訪問服務類成員。由於bindservice使用binder對象提供回調,因此建議採用這種方法。

+0

但是爲什麼我們使用MyLocalBinder類使用功能?爲什麼我們不能直接訪問服務? –

+0

我們總是可以使服務的對象,在主要活動使用它,但事實證明,一個綁定的服務被稱爲是要叫MyLocalBinder類? –

+0

服務是一個android應用程序組件。你不應該創建Service,Activity,receiver等對象......在你調用bindservice,開始活動之後,Android UI框架將會這樣做。如果您手動創建這些類對象,就像在代碼中引入內存泄漏一樣。此外,該框架將失去對這些組件生命週期的控制。 – 7383