将Context转换为View中的Activity是否总是安全的

Che*_*eng 24 android

我可以知道,我总是可以安全ContextActivity进入View吗?

View {
    Activity activity = (Activity)this.getContext();
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,它一直很好.我想知道,上面的代码会失败吗?

小智 57

据我所知,它并不总是安全的,因为上下文也可以从os传递给Service,BroadcastReceiver等.但是,几乎在某种情况下,这不是问题.只需查看此代码即可

if(context instanceof Activity)
Run Code Online (Sandbox Code Playgroud)

随意使用.


Hex*_*ise 5

我认为您可以使用以下代码段:

/**
 * 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;
}
Run Code Online (Sandbox Code Playgroud)


MBy*_*ByD 2

虽然我无法想到这种情况,但我认为这不是一个好主意,原因有两个:

  1. 为什么要这样做,什么时候明确需要 Activity?
  2. 如果明天这将被改变,并且会有其他上下文怎么办View

  • **1.** 在某些情况下,调用者无法将 Activity 作为参数。**2.** Android 在保持向后兼容性方面非常好(我不能说它的开发工具)。恕我直言,@lulumeya 的答案是要接受的正确答案。 (2认同)