【问题标题】:When building an Android library, what pattern can I use to support a configured callback in an Activity在构建 Android 库时,我可以使用什么模式来支持 Activity 中配置的回调
【发布时间】:2019-04-15 12:00:59
【问题描述】:

我正在为我们的平台构建一个 Android 库,我正在努力解决如何让我的用户传递一个在库中特定时间被调用的函数。

该库启动一个活动,该活动有一些指向我的 https API 的服务类。 (过度简化,但希望这已经足够详细了)

我想为我的用户提供一种方法来传递一个为 API 生成身份验证令牌的回调,允许他们自己生成它。也许界面可能看起来像String getAuthToken()。

但是我怎样才能在不丢失状态的情况下做到这一点呢?当库启动时,我从单例开始(它为库的主要活动启动了一个 Intent),但是当进程被终止并且您尝试返回它时,应用程序当然崩溃了,单例是之前设置的活动开始了。

我是否遗漏了一些在 Java 或 Android 中解决此问题的明显模式?

【问题讨论】:

  • SDK 是什么意思?它代表软件开发工具包,我不认为你正在创建它。
  • 抱歉,它是一个 Android 库。我们正在为我们的平台构建一个 SDK。但它是一个图书馆
  • SDK 和库之间没有明确的界限。什么时候库变成了 SDK?例如,你有一张 10x15 的照片,你把它切成两半,这些片还能叫照片吗?我会说是的。但是如果你把它们切片 100000 次,它们还能被命名为照片吗?关于库/SDK 的讨论也是如此。
  • 希望我现在已经免除了对 SDK 的所有提及。很明显我的意思是图书馆:)
  • 我实际上试图为你辩护)但你是对的,有时我会来这里争论一些事情:)

标签: java android android-activity callback singleton


【解决方案1】:

为什么在单例中需要一个活动的上下文?这看起来像是一个糟糕的设计。您不需要它来发出网络请求。

当您展示一个活动时,您可以控制它所涉及的所有生命周期。是的,当您旋转屏幕时,android 会重新创建它,这让您非常头疼,但为此,您可以使用ViewModels:

【讨论】:

  • 嘿,我从来没有说过我的单身人士需要上下文。我觉得我快疯了,因为我显然在这里错过了其他人都能得到的东西。我需要我的用户传递回调。该回调是一个实例。如果我的图书馆的入口点是一项活动,我不能把它交给活动,对吗?它必须是可包裹的或可序列化的? ViewModel 对这个案例有何帮助?
  • 在这种情况下,只需创建一个常规的单音,它可以保存一个数组或对象,实现您的回调。时机成熟时,只需对他们感兴趣,并向还活着的人发送通知。
  • 我有一个普通的单例,但没有让它可序列化,当进程死亡时如何让它保持活力?
  • 你不能,感谢 Java 垃圾收集器。从理论上讲,如果你singetlone是静态的,它就会和应用程序一样长。如果它被破坏 - 如果您通过与最初创建的流程相同的流程重新创建,因为所有应用程序都是全新的。 stackoverflow.com/questions/13891186/…
  • 好的,谢谢,这非常有帮助。也许这是我的静态单身人士遇到的另一个问题。
猜你喜欢
  • 2011-12-23
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多