为什么本机WLClient生命周期绑定到Activity生命周期

时间:2014-09-26 11:55:50

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

短版

我发现WLClient生命周期绑定到Activity。活动生命周期由OS管理。

你有什么建议可以补偿吗?

长版

对于Android Native项目,第一步应该是通过以下调用

创建WLClient实例
WLClient.getInstance(Context ctx)

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

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

每次重新创作,都需要以下内容:

  1. 连接到服务器
  2. 构建挑战处理程序
  3. 如果我传递一个继承Application的类(MainContext)(这是一个Context),我会出现以下错误:

    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)
    

1 个答案:

答案 0 :(得分:1)

目前的实施并不理想。如果您愿意,可以提交功能请求,以便为将来的版本重新评估。您可以通过以下方式提交:http://www.ibm.com/developerworks/rfe/

之所以如此,是因为WLClient具有一些功能,例如显示UI错误消息,监控应用是否处于心跳的前台/后台以及推送通知支持,这需要一个Android背景。

在这种情况下,预计会出现错误。