Android中Toast,Database和其他实用程序的单例模式

时间:2014-01-08 14:45:29

标签: android android-context

因为我真的很烦恼为Android(数据库,Toast,首选项)中的大多数操作传递Context。我想知道这是一种编程初始化这些元素的好方法(例如在Application-Class中)。

它工作得很好,我不必将元素从Class传递给类,我看不出任何缺点。这就是我想问你们的原因。我为什么不用这个?

对于那些不知道我的意思的人:

MainApplication:

public class MainApplication extends Application {

  @Override
  public void onCreate() {
    super.onCreate();
    VolleySingleton.init(this);
    Toaster.init(this);
    PrefUtilities.init(this);
  }
}

烤面包机:

public class Toaster {
   private static Toaster mInstance = null;
   private Context context;
   private Toast currentToast;

   private Toaster(Context context) {
      this.context = context;
   }

   public static void init(Context context) {
      mInstance = new Toaster(context);
   }

   public static void toast(String message){
      if (mInstance.currentToast != null){
          mInstance.currentToast.cancel();
      }
      mInstance.currentToast = Toast.makeText(mInstance.context, message, Toast.LENGTH_SHORT);
      mInstance.currentToast.show();
   }
}

我也对这个问题感兴趣,为什么需要Toast或其他东西的上下文?我可以使用Toast的应用程序上下文,并在每个Activity / Fragment中访问。为什么Android-Team以这种方式实现它?

所以基本上有两个问题:

1。我的实施(内存,时间)是否有任何缺点?

2。为什么像Toast这样的课程需要一个上下文?

1 个答案:

答案 0 :(得分:1)

<强> 1。我的实施(内存,时间)是否有任何缺点?

好吧,你总是在启动你的数据库,即使你在那个会话期间根本不使用它,对于其他类也是如此。无法想到其他任何事情,因为无论如何你都会使用应用程序上下文,至少对数据库而言。

<强> 2。为什么像Toast这样的课程需要一个上下文?

Toast需要一个上下文,因为它接触UiThread,所以需要一个引用来访问该线程。