【问题标题】:Global initialization in AndroidAndroid中的全局初始化
【发布时间】:2011-10-08 01:55:18
【问题描述】:

我正在编写一些作为 jar 文件分发的库代码,开发人员在使用之前需要使用应用程序 ID 对其进行初始化。初始化只是一个函数调用,比如

MyLibrary.initialize("16ea53b");

棘手的是我不确定如何指导开发人员进行这个初始化调用。起初,我认为主要活动中的单个静态初始化程序块将是最简单的方法。问题是用户可以通过其他一些活动或意图进入应用程序,并且不会加载主要活动。有没有一种通用的方法来确保应用程序启动时运行一行代码,而不管应用程序是如何启动的?

初始化调用是幂等的,所以我可以告诉人们在每个可以使用它的地方进行初始化调用,但这会很麻烦。

【问题讨论】:

    标签: android initialization android-intent static-initializer static-initialization


    【解决方案1】:

    一种简单的方法是在初始化库代码时在 SharedPrefences 中保存一些内容。然后,在你认为重要的地方,你可以检查这个值,如果它存在则继续,或者提示初始化或任何东西(错误消息等)。这也将允许您的开发人员不必多次初始化。

    请务必为开发人员提供一个 API 来重置此值。

    另外,here 是一篇关于 API 设计的精彩演讲,可能会对您有所帮助,作者 Joshua Bloch。

    【讨论】:

    • 我认为我在如何让我的库访问 SharedPreferences 时遇到了同样的问题 - 我需要让开发人员使用有效的 Context 初始化库才能访问 SharedPreferences。还是有其他方法可以访问 Application 对象?顺便说一句,这是一个很棒的演讲。
    • 根据 Android 指南,我们可以从 Application 类继承,从而使用它来存储/维护全局数据或使用静态单例类。我个人使用过 Application 对象。所以是的,您使用有效上下文初始化库的开发人员方法是有意义的。我很想知道更多关于这方面的任何其他机制。
    • 我还是有同样的问题——开发者在哪里用上下文初始化库?他们必须从每个可能启动应用程序的类中执行此操作。
    • 假设您希望采用此解决方案,那么一种方法是让开发人员编写他们的 Application 类继承自您的 Library Application 类(此处解释有些不连贯:androidblogger.blogspot.com/2010/09/…)。希望这会有所帮助,祝你好运!
    【解决方案2】:

    这听起来像是一个可以通过扩展创建一个扩展 Application 的类并将其放置在那里来解决的问题,这对于整个 Application 来说是全局的。

    【讨论】:

    • 对于单个应用程序,这是有道理的。对于库开发人员,我宁愿不向每个用户解释如何继承 Application。
    猜你喜欢
    • 1970-01-01
    • 2017-06-17
    • 2011-07-20
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多