2016-12-21 40 views
0

我有一項服務,我用它通過WindowManager顯示自定義視圖,並將其保持在屏幕上一段時間。是否有可能從我的自定義視圖中獲得我的服務實例?我想這應該是因爲我基本上持這種看法的引用我的服務象下面這樣:如何從維護服務中獲取服務實例?

MyCustomView mCustomView; 
... 

onCreate() { 
    mCustomView = new MyCustomView(this); 
    ... 
} 
+1

您正在將服務的實例傳遞給構造函數...什麼阻止您使用它? – Selvin

回答

0

您的服務充當您的自定義視圖的上下文。而View類有一個getContext()方法,顯然,它返回前面提供的上下文。您只需要將您的上下文投射到您的服務:

MyService service = (MyService)mCustomView.getContext(); 
+0

呵呵,沒想到它可以做到這一點。大。但是,如果我保留這個引用,它會導致一些內存泄漏,或者它可以使內存使用量增加嗎?我沒有全局聲明它,只是在從同一個服務調用的方法中使用它(大聲笑我剛剛意識到我可以剛剛通過方法構造函數中的引用)。 –

+0

只要你不在正常的服務生命週期之外存儲該上下文(例如作爲一個靜態變量),你就沒有問題 –

+0

但是如果視圖被銷燬並且服務仍在運行,視圖將被泄露。 – Selvin

1

雖然我還沒有嘗試過,我會假設,getContext()View將返回你Service,假設你Service是您的問題代碼片段中的this

+0

嗯,那麼fx:公共AppCompatTextView(上下文上下文,AttributeSet attrs,int defStyleAttr){超級(** TintContextWrapper.wrap(context)**,attrs,defStyleAttr);' – Selvin

+0

你有沒有睡過? :)有時感覺就像你訪問每一個Android相關的SO帖子! –

+0

嘿它是@CommonsWare。哥們你真了不起。 –