【问题标题】:Why native WLClient lifecycle bind to Activity lifecycle为什么原生 WLClient 生命周期绑定到 Activity 生命周期
【发布时间】:2014-09-26 11:55:50
【问题描述】:

短版

我发现 WLClient 生命周期绑定到 Activity。活动生命周期由操作系统管理。

您有什么建议可以弥补这一点吗?

加长版

对于 Android Native 项目,第一步应该是通过以下调用创建一个 WLClient 实例

WLClient.getInstance(Context ctx)

从 API 文档来看,它是一个 Context,而不是一个 Activity,但实际上,在 WL 框架的 WLPush.java 中会有一个类型转换。

将 WLClient 绑定到 Activity 是没有意义的,它的生命周期不受我们控制。因此出于安全考虑,每个 WLClient 都应该在创建新 Activity 时重新创建。

并且对于每次重新创建,都需要以下内容:

  1. 连接到服务器
  2. 构造挑战处理程序

如果我传递一个类(MainContext)继承Application(它是一个上下文),则会出现以下错误:

09-26 13:33:29.571: E/AndroidRuntime(32300): FATAL EXCEPTION: pool-2-thread-4
09-26 13:33:29.571: E/AndroidRuntime(32300): Process: com.XXXX, PID: 32300
09-26 13:33:29.571: E/AndroidRuntime(32300): java.lang.ClassCastException: com.XXX.MainContext cannot be cast to android.app.Activity
09-26 13:33:29.571: E/AndroidRuntime(32300):    at com.worklight.wlclient.api.WLPush.<init>(WLPush.java:151)
09-26 13:33:29.571: E/AndroidRuntime(32300):    at com.worklight.wlclient.api.WLClient.getPush(WLClient.java:673)
09-26 13:33:29.571: E/AndroidRuntime(32300):    at com.worklight.wlclient.WLRequest.requestFinished(WLRequest.java:203)
09-26 13:33:29.571: E/AndroidRuntime(32300):    at com.worklight.wlclient.InternalRequestSender.run(AsynchronousRequestSender.java:138)
09-26 13:33:29.571: E/AndroidRuntime(32300):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-26 13:33:29.571: E/AndroidRuntime(32300):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-26 13:33:29.571: E/AndroidRuntime(32300):    at java.lang.Thread.run(Thread.java:841)

【问题讨论】:

    标签: android android-activity ibm-mobilefirst lifecycle android-lifecycle


    【解决方案1】:

    当前的实现并不理想。如果您愿意,可以提交功能请求以重新评估此功能以供将来发布。您可以通过以下方式提交:http://www.ibm.com/developerworks/rfe/

    之所以这样,是因为WLClient 有一些功能,例如显示 UI 错误消息、监控应用程序是否在前台/后台进行心跳以及推送通知支持,这些都需要 Android 上下文.

    在这种情况下,您得到的错误是预期的。

    【讨论】:

    • 是的,我明白了。使用的参数令人困惑。如果需要 Activity,只需明确指定,而不是 Context
    • @Qylin,我会在文档中看到关于澄清它的信息。如果我的回答对您有所帮助,请标记为已回答。
    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 2015-04-22
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2012-09-21
    相关资源
    最近更新 更多