Работает ли приложение быстрее с помощью всего одного обработчика для потока пользовательского интерфейса? - PullRequest
0 голосов
/ 19 июня 2020

Метод 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, чтобы избежать утечки контекста ?

...