【问题标题】:Should I instantiate a new Facebook variable for each activity, or use static Facebook variable我应该为每个活动实例化一个新的 Facebook 变量,还是使用静态 Facebook 变量
【发布时间】:2011-06-12 16:03:28
【问题描述】:

我创建了一个抽象类 FbActivity,它扩展了 Activity 以使用 Facebook 的 Android 版 SDK 连接到 facebook。类似于以下内容:

public abstract class FbActivity extends Activity {
  private static final String APP_ID = "xxxxxxxxxxxxx";

  protected Facebook          mFacebook;

  /*
   * Override onCreate to connect to facebook.
   */
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mFacebook = new Facebook(APP_ID);
    setFbConnection();
  }

我是想让每个FbActivity 实例化他们自己的Facebook 变量,还是应该让Facebook 变量static,这样整个应用程序只有一个变量?或者我应该使用singleton 类型的设置,如下所示...

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (mFacebook == null) {
      mFacebook = new Facebook(APP_ID);
    }
    setFbConnection();
  }

如果您对这个确切的问题没有答案,请从 Facebook 变量中抽象出来。什么时候有一个静态变量“更好”(尤其是在这样的继承情况下)?

【问题讨论】:

    标签: java android facebook-graph-api


    【解决方案1】:

    仅使用一个单例对象来存储数据(显然)比使用多个非单例变量需要更少的内存。但是,对静态单例的访问应该是同步的,以防止线程问题,这会使其访问速度稍慢。 单例的另一个优点可能是它们更容易在您的代码中使用(没有对应该传递的变量的引用),但是静态通常会导致丑陋的编码实践。

    在您的情况下,我自己会使用单例,主要是为了限制连接数。但请注意,使用单例是个人喜好问题。看看这个帖子more discussion on this.

    【讨论】:

    • 在这种特殊情况下,我相信只有活动的Activity才有可能访问任何东西,更不用说单例了。这会让我相信同步是不必要的。听起来对吗?
    • 但是,如果您决定稍后将新线程或服务添加到您的活动中怎么办。你会记得更改对单身人士的访问权限吗?
    猜你喜欢
    • 1970-01-01
    • 2012-09-29
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    相关资源
    最近更新 更多