簡體   English   中英

從Android庫模塊在主應用程序中啟動活動

[英]Launch an activity in main app from an Android Library Module

我正在構建我的第一個庫模塊,我計划為多個項目填充可重用的代碼。 我的第一個障礙是我需要能夠從庫模塊在主應用程序中啟動一個活動。

例如,我有一個啟動畫面活動。 它運行2秒鍾,然后啟動主要活動。 我相信我可以重用這個啟動畫面活動,我想把它放在我的庫模塊中。 但是,我不確定如何從庫中啟動主要活動。

主要應用程序設置的主要功能:

<activity
    android:name="com.example.myLibraryModule.SplashScreen"
    android:theme="@style/AppTheme.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

清單啟動了當前駐留在我的庫模塊中的啟動畫面。

由於庫是主應用程序的依賴,而不是相反,我不知道如何從我的SplashScreenActivity啟動MainActivity 它並不像以下那么容易:

Intent i = new intent(this, MainActivity.class);
startActivity(i);

我將從主清單中刪除SplashScreenActivity並創建一個名為startMainActivity()或類似的protected方法。 在您通常希望啟動MainActivity的地方的SplashScreenActivity基類中調用此方法。

然后在你的主項目中我將子類SplashScreenActivity並覆蓋startMainActivity()方法來執行你想要的行為。 不要忘記將SplashScreenActivity子類放在主項目清單中。

這樣,您可以在所有可能依賴它的項目中輕松地重用SplashScreenActivity的行為。

你不應該這樣做。 您強烈耦合這兩個類(從lib開始活動的類和要加載的Activity。

相反 - 您可以在應用程序中設置廣播接收,該接收將接收意圖對象並為您啟動活動。 如果將來您希望遠程啟動其他活動或服務 - 您將能夠使用相同的廣播接收器接受來自您的lib的請求。 您所要做的就是將數據添加到Intent的Extras集合中,該集合將包含要打開的Activity(或任何其他任務)。

這個解決方案解除了你的lib和app的分離,它是更好的架構wize(在我看來)。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM