构建UI实用程序类的最佳方法

我想建立一个实用课程。 它应该从数据库中读取值,提供典型的UI或交互功能,例如设置应用程序的标题,设置背景图片,播放背景音乐。

因为提出了其他问题如何在非UI方法中使用UI函数? 我意识到,我有一堆不同的方式来做到这一点。 我测试了不同的方法来设置标题,每一种方法都有效。 但是哪个是最干净/正确/自信的方式,为什么呢?

在例子中,调用类是一个kotlin类,但这是无所谓的。

方式之一! 所有相关的活动都在调用活动中完成。 上下文是通过构造函数传递的,也可以用每个函数调用来调用。 在我看来,我们在这里确实没有那么多的依赖性,但是公用事业用户必须自己做很多事情。

调用类:

frameworkFeatures(applicationContext); setTitle(frameworkFeatures.frameworkSetTitlesStaticContext()); 

所谓的类:

  private static Context frameworkContext; public frameworkFeatures(Context context) { frameworkContext = context; } public static String frameworkSetTitlesStaticContext(){ TestMainDatabase.getDatabase(frameworkContext); TestMainDatabase db = RoomAsset.databaseBuilder(frameworkContext, TestMainDatabase.class, "TestMainDatabase.db").allowMainThreadQueries().build(); return db.featuresDao().findByName("title").getFeatureValue().toString(); } 

方式二。 尽可能地隐藏。 一切都必须传递给工具类。 当被更多的Activity使用时如何处理这个。 在utilitie类中使用静态Activity声明还是可以的吗?

调用类:

  frameworkFeatures(applicationContext,this) frameworkFeatures.frameworkSetTitleEverythingisStatic() 

所谓的类:

 private static Context frameworkContext; private static Activity frameworkActivity; private static TestMainDatabase frameworkTestMainDatabase; public frameworkFeatures(Context context, Activity activity){ frameworkContext = context; frameworkActivity = activity; TestMainDatabase.getDatabase(context); frameworkTestMainDatabase = RoomAsset.databaseBuilder(frameworkContext,TestMainDatabase.class, "TestMainDatabase.db").allowMainThreadQueries().build(); } public static void frameworkSetTitleEverythingisStatic(){ frameworkActivity.setTitle(frameworkTestMainDatabase.featuresDao().findByName("title").getFeatureValue().toString()); } 

如果您需要有效的上下文/活动,则可以提供应在Application onCreate()调用的初始化API。 就像是 :

 Framework.initialize(appContext); 

在里面你可以注册自己的Application.ActivityLifecycleCallbacks来跟踪当前可见/活动的活动:

 public static void initialize(Application context) { appContext.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() { ... @Override public void onActivityResumed(Activity activity) { sGlobalContext = activity; } @Override public void onActivityPaused(Activity activity) { sGlobalContext = null; } .... ... } 

然后,你的框架不应该担心活动/上下文了。 对于用户来说都是透明的。

Interesting Posts