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

时间:2016-01-19 19:55:21

标签: android android-library

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

例如,我有一个启动画面活动。它运行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>

清单启动当前驻留在我的库模块中的启动画面。

由于库是主应用程序的依赖项而不是相反,我不知道如何从我的MainActivity启动SplashScreenActivity。它并不像以下那么容易:

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

2 个答案:

答案 0 :(得分:2)

我从主要清单中移除SplashScreenActivity并创建一个名为protected或类似的startMainActivity()方法。在您通常希望启动SplashScreenActivity的地方的MainActivity基类中调用此方法。

然后在你的主项目中,我会继承SplashScreenActivity并覆盖startMainActivity()方法来执行你想要的行为。别忘了把你的SplashScreenActivity子类放在主项目的清单中。

通过这种方式,您可以轻松地在所有可能依赖它的项目中重复使用SplashScreenActivity的行为。

答案 1 :(得分:2)

你不应该这样做。你强烈地耦合了这两个类(从lib开始活动的类和要加载的Activity。

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

此解决方案解除了您的lib和应用程序,它是更好的架构wize(在我看来)。

祝你好运!