Android - отображать прогресс при выполнении длинного кода в потоке пользовательского интерфейса основной активности [закрыто]

Маленькое добавление ответа @Mark Hildreth.

Контекстный стек выглядит как {thread.get_ident(): []}, где [] называется «стек», потому что используется только append (push), pop и [-1] (__getitem__(-1)). Таким образом, стек контекста будет сохранять фактические данные для потока нити или зеленого.

current_app, g, request, session и т. Д. Является LocalProxy объектом, который просто переопределяет специальные методы __getattr__ , __getitem__, __call__, __eq__ и т. д. и вернуть значение из верхнего стека контекста ([-1]) по имени аргумента (например, current_app, request). LocalProxy необходимо импортировать эти объекты один раз, и они не будут пропускать актуальность. Так что лучше просто импортировать request, где бы вы ни находились в коде, вместо этого играйте с отправкой аргумента запроса до ваших функций и методов. Вы можете легко писать собственные расширения вместе с ним, но не забывайте, что легкомысленное использование может затруднить понимание кода.

Проведите время, чтобы понять https://github.com/mitsuhiko/werkzeug/ blob / master / werkzeug / local.py .

Итак, как заполняется оба стека? По запросу Flask:

  1. создать request_context по средам (init map_adapter, путь соответствия)
  2. ввести или нажать этот запрос: очистить предыдущий request_context создать app_context, если он пропустил и нажал на стек контекста приложения, этот запрос был нажат для запроса сеанса инициализации контекста, если он пропустил
  3. запрос на отправку
  4. очистить запрос и поместить его из стека

-8
задан user1804542 6 November 2012 в 23:18
поделиться