Метод Looper.getMainLooper()
равен synchronized
, поэтому экран может «зависнуть» на некоторое время, если следующий код выполняется в MainThread:
class A {
Handler h1 = new Handler(Looper.getMainLooper());
Handler h2 = new Handler(Looper.getMainLooper());
}
Чтобы уменьшить задержку из-за синхронизации, это можно использовать код:
class A {
Handler h1 = B.getHandler();
Handler h2 = B.getHandler();
}
class B {
private static Handler h;
public static Handler getHandler() {
if (h == null) {
h = new Handler(Looper.getMainLooper());
}
return h;
}
}
Есть ли недостатки у такого подхода? Handlers
должно быть static
, чтобы избежать утечки контекста ?