我想構建實用程序類。它應該從數據庫中讀取值,提供典型的UI或交互功能,例如設置應用程序的標題,設置背景圖片,播放背景音樂。構建UI實用程序類的最佳方法
因爲提出了其他問題How to use UI functions in non UI methods?我意識到我有一堆不同的方式來做到這一點。我測試了每種方法設置標籤的方法,每種方式都有效。但是哪個是最乾淨/正確/自信的方式,爲什麼?
在這些例子中,調用類是一個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聲明仍然可以嗎?
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());
}
應該sGlobalContext是這個類中的靜態上下文變量。你不要擔心,我不必擔心了,因爲一次只有一項活動可以活躍。當我「清理」班級時,我沒有任何問題,當另一個Actitvity被調用時? – freeLearning
當從非活動類中調用實用程序時。我可以打電話給他們只是沒有初始化? – freeLearning
正確 - 你只需要初始化你的框架一次來註冊生命週期監聽器。然後直接使用你的'API'而不需要傳遞上下文。像'frameworkSetTitle'。 'frameworkSetTitle'將從'Framework'外觀中定義的封裝私有靜態getter方法中獲取它,其中上下文將被存儲在私有靜態變量'sGlobalContext'中 – j2ko