Я должен загрузить шрифт с обратными вызовами и установить его в качестве шрифта темы с методом отражения.И это нужно сделать до вызова setContentView()
в onCreate()
.Я попытался использовать CountDownLatch
в главном потоке, как показано ниже, чтобы заставить его ждать загрузки шрифта:
loadFont();
try {
System.out.println("latch awaiting");
latch.await();
} catch (InterruptedException e) {
System.out.println("latch error");
e.printStackTrace();
} finally {
System.out.println("latch error");
latch.countDown();
}
Но похоже, что обратный вызов инициирован, но никогда не возвращал никакого результата, как обычнобудет (onTypefaceRetrieved()
не называется).Новый поток и обратные вызовы инициируются, как показано ниже:
Runnable runnable = new Runnable(){
@Override
public void run() {
FontCall.Callback callback = new FontCall.FontCallback(){
@Override
public void onFontRetrieved(final Typeface typeface) {
//do reflection stuff
latch.countDown();
}
@Override
public void onError(int err) {
//handle error
latch.countDown();
}
};
FontCall.requestFont(callback);
}
};
Thread thread = new Thread(runnable);
thread.run();
Может кто-нибудь сказать мне, что я сделал не так?Или я вообще не должен делать такие вещи (заставлять поток пользовательского интерфейса ждать)?(Для справки, шрифт обычно извлекается из кэша шрифтов Android, который занимает менее 100 мс.)