从 Android 库模块在主应用程序中启动 activity

Launch an activity in main app from an Android Library Module

我正在构建我的第一个库模块,我计划为多个项目填充可重用代码。我的第一个障碍是我需要能够从库模块在主应用程序中启动 activity。

例如,我有启动画面activity。它运行 2 秒,然后启动主 activity。我相信我可以重用这个闪屏activity,我想把它放在我的库模块中。但是,我不确定如何从库中启动主要 activity。

主应用设置中的 Mainfest:

<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 方法。在 SplashScreenActivity 基地 class 中您通常希望开始 MainActivity.

的地方调用此方法

然后在您的主项目中,我将子class SplashScreenActivity 并覆盖startMainActivity() 方法以执行您希望的行为。不要忘记将您的 SplashScreenActivity subclass 放入主项目的清单中。

这样您就可以在可能依赖于它的所有项目中轻松地重用 SplashScreenActivity 的行为。

你不应该那样做。您正在强烈耦合这两个 classes(class 从 lib 开始 activity 和要加载的 Activity。

相反 - 您可以在应用程序中设置广播接收,它将接收一个意图对象并为您启动 activity。如果将来您希望远程启动其他活动或服务 - 您将能够使用相同的广播接收器来接受来自您的库的请求。您所要做的就是将数据添加到 Intent 的 Extras 集合中,该集合将包含要打开的 Activity(或者当然是任何其他任务)。

这个解决方案 de-couples 你的库和应用程序,它是更好的架构智慧(在我看来)。

祝你好运!