我在我的應用程序中運行了很長時間的服務類,我有時需要一個UI線程來完成我的工作,例如找到一個聯繫人名稱,這使我創建一個遊標變量,該遊標變量需要一個內容解析器這需要一個上下文。我如何使用需要UI線程的功能,而無需在android中給它上下文?
如何在沒有任何UI線程的情況下自由地做這項工作?
我在我的應用程序中運行了很長時間的服務類,我有時需要一個UI線程來完成我的工作,例如找到一個聯繫人名稱,這使我創建一個遊標變量,該遊標變量需要一個內容解析器這需要一個上下文。我如何使用需要UI線程的功能,而無需在android中給它上下文?
如何在沒有任何UI線程的情況下自由地做這項工作?
你將無法從另一個線程(顯然)獲得UI線程,但你將能夠獲得一個Context,這當然是你需要的。
而Service
是Context
,因此您可以通過服務引用訪問getResource()或getContentResolver()等任何方法。
你實際上可以從另一個線程獲得UI線程:https://developer.android.com/training/multiple-threads/communicate-ui.html – thomaspsk
沒有,實際上,你真的不能,但是如果你已經在UI線程中,你可以通過創建一個Handler實例來保持對它的引用,這將允許你稍後調用UI線程中的一段代碼。但是在服務的情況下,你將不能創建這個實例,所以...... –
@Orabîg所有你需要做的就是實例化一個使用主線程的Looper的Handler。爲什麼不能從'服務'(或任何後臺線程)?實際上這很簡單。 – earthw0rmjim
'Service'是'Context'的一個子類,你可以簡單地調用'getContentResolver()'。 – earthw0rmjim
對不起,我會改變我的問題。 –
謝謝,問題是我在一個可運行的類中使用該函數,我已經將一個內容解析器變量從服務傳遞給它,它工作。@ earthw0rmjim –