2 общие причины нулевого контекста в целях:
Вы пытаетесь получить контекст обратного вызова асинхронного (обработчик, сетевой вызов) вызов, но активность/фрагмент исчез из-за другого действия пользователя (например: нажата назад). Поэтому представление отделяется и больше не имеет контекста.
У вас есть утечка памяти где-то и два или более экземпляра вашей деятельности и иерархия представлений. Тогда что-то происходит в том экземпляре, о котором вы больше не ссылаетесь, но представление потеряло ссылку на его контекст.
Относительно обработчика. Я не уверен, что у представления есть свой собственный обработчик, или если он использует обработчик Activity, к которому он привязан, вам, вероятно, придется прочитать источник, чтобы узнать. Однако вопрос не имеет особого значения: если представление не имеет контекста, у вас есть большая проблема: его нет на экране.
Относительно того, является ли код в 5. релевантным, вам нужно будет ответить на следующие вопросы: почему бы вам не знать, в каком потоке работает ваш код?
Когда вы знаете, в каком потоке вы находитесь, и если имеет смысл, чтобы вы не были в основном потоке, то использование обработчика является допустимым способом выполнения вашего кода на главном. Также как Activity.runOnUiThread()
Просто помните, что жизненный цикл обработчика не привязан к действию. Таким образом, вы должны очистить очередь сообщений и runnables, когда ваша активность/фрагмент приостанавливается
, если это происходит, в основном потому, что Activity/Fragment, на котором размещен виджет, отключен – Blackbelt