Подтвердить что ты не робот

Всегда ли безопасно использовать контекст для активности в представлении?

Могу ли я знать, безопасно ли всегда включать Context в Activity в пределах View?

View {
    Activity activity = (Activity)this.getContext();
}

Пока все работает отлично. Мне было интересно, есть ли какие-либо случаи, связанные с тем, что приведенный выше код не будет работать?

4b9b3361

Ответ 1

Пока я не могу придумать такой случай, я думаю, что это не такая замечательная идея по двум причинам:

  • Почему вы хотите сделать это, когда вам явно нужна активность?
  • Что делать, если завтра это будет изменено, и будет существовать другой контекст для View?

Ответ 2

Как я знаю, это не всегда безопасно, потому что контекст также может передаваться из os в Service, BroadcastReceiver и т.д. Но почти в этом случае это не проблема. просто проверьте этот код

if(context instanceof Activity)

и не стесняйтесь использовать.

Ответ 3

Технически, представления могут быть созданы с любым Контекстом (через LayoutInflater)

Итак, если вы не уверены, что ваши представления только создаются действиями, я бы не предложил этого. Это не чистая идея.

Ответ 4

Я думаю, вы можете использовать следующий фрагмент:

/**
 * Get activity instance from desired context.
 */
public static Activity getActivity(Context context) {
    if (context == null) return null;
    if (context instanceof Activity) return (Activity) context;
    if (context instanceof ContextWrapper) return getActivity(((ContextWrapper)context).getBaseContext());
    return null;
}