精简版

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

您对此有何建议?

长版

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

WLClient.getInstance(Context ctx)


从API文档来看,它是一个上下文,而不是一个活动,但实际上,WL框架中的WLPush.java中将存在类型转换。

将WLClient绑定到活动不受生命控制的Activity毫无意义。因此,出于安全考虑,应在创建新的Activity时重新创建每个WLClient。

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


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


如果我传递了继承应用程序(是上下文)的类(MainContext),则会出现以下错误:

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)

最佳答案

当前的实现并不理想。如果需要,您可以提交功能请求,以重新评估此功能以用于将来的版本。您可以通过以下方式提交:http://www.ibm.com/developerworks/rfe/

之所以这样,是因为WLClient具有某些功能,例如显示UI错误消息,监视应用程序是否处于心跳的前台/后台以及需要Android上下文的推送通知支持。

在这种情况下,您会遇到错误。

09-28 04:36