Я просматриваю исходный код класса HandlerThread и заметил, что класс содержит член данных mHandler. mHandler - это экземпляр типа Handler.
private @Nullable Handler mHandler;
Существует метод доступа для получения экземпляра закрытого члена, определенного также в классе HandlerThread .
@NonNull
public Handler getThreadHandler() {
if (mHandler == null) {
mHandler = new Handler(getLooper());
}
return mHandler;
}
Я попытался получить ссылку на член mHandler, вызвав метод из моей ссылки HandlerThread. AndroidStudio не разрешает вызов метода getThreadHandler для экземпляра HandlerThread. Этот метод выглядит общедоступным, как и другие общедоступные методы, которые можно вызывать в экземпляре HandlerThread. Кто-нибудь знает, почему открытый метод getThreadHandler не может быть вызван для экземпляра HandlerThread. Я просто что-то упустил в определении класса / метода / члена? Мой код для создания экземпляра HandlerThread и вызова методов показан ниже.
...
import android.os.*
...
class SearchActivity : AppCompatActivity(), View.OnClickListener {
...
private val backgroundWork = HandlerThread("BackgroundApiCall")
private lateinit var backgroundHandler: Handler
...
override fun onCreate(savedInstanceState: Bundle?) {
...
backgroundWork.start()
backgroundHandler = = Handler(backgroundWork.looper)
// an attempt here to call getThreadHandler will not work
val handler = backgroundWork.threadHandler // or .getThreadHandler() for our Java friends
...
override fun onDestroy() {
super.onDestroy()
backgroundWork.quit()
}
override fun onClick(_searchBtn: View?) {
backgroundHandler.post(requestWork)
}
....
Примечание. Я публикую только код, относящийся к рассматриваемой проблеме, а не весь класс.