许多“getContext()”或一个私有上下文 = getContext() 并使用它?

Posted

技术标签:

【中文标题】许多“getContext()”或一个私有上下文 = getContext() 并使用它?【英文标题】:Many "getContext()" or one private context = getContext() and use it? 【发布时间】:2018-03-22 04:02:33 【问题描述】:

我的片段中多次需要上下文:

    ...
    account.restore(getContext());
    ...
    dbHelper = new DBHelper(getContext());
    ...
    DiskLruBasedCache.ImageCacheParams cacheParams = new DiskLruBasedCache.ImageCacheParams(getContext(), "CacheDirectory");
    ...
    mImageLoader = new SimpleImageLoader(getContext(), cacheParams);
    ...
    Toast.makeText(getContext(), "err: " + error, Toast.LENGTH_LONG).show();
    ...
    RecyclerView.LayoutManager layoutManager = new CustomLayoutManager(getContext());
    ...

或者我应该初始化一次然后使用它。

什么是最好的方法?

【问题讨论】:

private Context = getContext() 不起作用 private Context = getContext() 不会编译。 【参考方案1】:

这主要是一个偏好问题。您可以在任何需要的地方致电getContext()——无需担心性能开销。或者,您可以在 onCreate 方法中分配一个 private Context context 字段。或者,如果特定方法有多种用途,请创建一个局部变量。

如果getContext 可能很慢,那么您肯定应该隐藏它,但它实际上只是一个简单的访问器(几乎——它在内部做了一点间接)。

选择你认为最易读的东西。

【讨论】:

OP 已经在使用getContext(),只是询问将其隐藏是否有意义。 这就是 Cricket_007 提到 getContext() 不起作用的原因。你也可以在这里查看***.com/a/20464697/7337723 你在说什么? getContext()Fragment 中运行良好。它返回对所有者活动的引用(通过FragmentHostCallback),因此它与调用getActivity() 相同。 Fragment.getContext: developer.android.com/reference/android/app/…【参考方案2】:

在这种情况下,最好调用一次并使用它。这是因为没有多余的函数调用,执行速度会更快。 很常见

Context context = getContext();

我已经这样做了很多次并将其存储到一个类中的一个变量中。在这种情况下,虽然它看起来像这样:

class SomeClass 
   Context context;
   @Override
   void onCreate()
      context = getContext();
   

【讨论】:

以上是关于许多“getContext()”或一个私有上下文 = getContext() 并使用它?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Application.getContext() 返回 null? [复制]

无法解析“myAdapter”中的方法“getContext”[重复]

片段中的 getContext()

getContext() , getApplicationContext() , getBaseContext()的区别

ActionContext.getContext();

如何使用来自不同函数的(私有)变量?