Всегда ли безопасно использовать контекст для активности в представлении?
Могу ли я знать, безопасно ли всегда включать Context
в Activity
в пределах View
?
View {
Activity activity = (Activity)this.getContext();
}
Пока все работает отлично. Мне было интересно, есть ли какие-либо случаи, связанные с тем, что приведенный выше код не будет работать?
Ответы
Ответ 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;
}