生成 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();
}

方式二。尽可能隐藏。一切都必须传递给实用程序类。当被更多活动使用时如何处理此问题。在实用类中使用静态活动声明是否仍然可以?

调用类:

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());
}

如果您需要有效的上下文/活动,您可以改为提供应在ApplicationonCreate()中调用的初始化 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; 
}
....
...
}

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

相关内容

最新更新