自從Android引入了庫項目以來,我一直在將我的應用程序轉換爲庫,以便可以通過適當的調整來製作多個版本(例如,使用相同的自由和專業版本代碼庫,但改變了一些東西)。從Android庫調用非庫代碼
我最初有麻煩讓圖書館項目的代碼訪問我的子項目中的字段。換句話說,我的免費和專業版本每個都有一個包含少量常量的類,圖書館項目將用它來區分某些功能。
在子項目中,我擴展了庫的主要活動並添加了一個靜態初始化塊,它使用反射更改庫中字段的值。
public class MyMainActivityProVersion extends MyMainActivity {
public static final String TAG = Constants.APP_NAME + "/SubClass";
static {
try {
ConstantsHelper.setConstants(Constants.class);
} catch (Exception e) {
Log.d(TAG, "--- Constants not initialised! ---");
e.printStackTrace();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
在這段代碼,ConstantsHelper是在圖書館,和我從我的子項目提供Constants.class。這會初始化庫項目中的常量。
我的方法很好,除了一個特定的用例。當應用程序在一段時間內沒有被使用並且被操作系統「停止」時,ConstantsHelper中的靜態字段將被遺忘。
常數應該由主要活動重置(如上所示),但主要活動甚至沒有啓動,因爲操作系統恢復了不同的活動。其結果是,常量的初始化被遺忘了,我不能重新初始化它們,因爲恢復的活動在圖書館(它不知道子項目)。
我該如何'告訴'庫中的其他活動來調用子項目中的代碼來恢復?或者,是否有辦法確保我的子項目中的某些代碼在每個簡歷上都被調用?
我可能可以解釋類加載器中發生的事情,但我還沒有完全理解 - 您是指「圖書館中恢復的活動」是什麼意思?它是'MyMainActivityProVersion',正確的,它在你的應用程序中。常數被遺忘是什麼意思? –
MyMainActivity繼續調用一些其他活動,在這種情況下它是ViewerActivity,它駐留在庫項目中。如果用戶在ViewerActivity上,然後按下「home」,應用程序最終會關閉,並且ConstantsHelper中的常量必須重新初始化。他們不重新初始化,因爲當用戶恢復應用程序時,恢復的活動是ViewerActivity,並且我上面的重要代碼沒有執行 – HXCaine
因此,常量值不僅僅是ProVersionActivity?你知道應用程序類嗎?無論啓動的「子活動」如何,它都會創建一次。 – thaussma