【发布时间】:2018-01-13 12:32:48
【问题描述】:
我想构建一个实用程序类。它应该从提供典型 UI 或交互功能的数据库中读取值,例如设置应用程序的标题,设置背景图片,播放背景音乐。
因为问了另一个问题How to use UI functions in non UI methods? 我意识到我有很多不同的方法可以做到这一点。我测试了设置标题的不同方法,每一种方法都有效。但哪种方式最干净/正确/自信,为什么?
在示例中,调用类是 kotlin 类,但这无关紧要。
方法之一!与 Activity 相关的一切都在调用 Activity 中完成。上下文通过构造函数传递,也可以在每个函数调用中调用。 在我看来,我们确实没有那么多依赖项,但实用程序用户必须自己做很多事情。
调用类:
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 使用时如何处理。在实用程序类中使用静态 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());
}
【问题讨论】:
标签: java android android-activity architecture utilities