使用Messenger

时间:2015-09-15 06:57:37

标签: android ipc instrumentation

我有一个使用UPnP服务器的应用。对于检测测试,我想模拟它,即创建我自己的UPnP服务器,该服务器将通过测试进行检测。不幸的是,似乎UPnP服务器无法在与应用程序(它是UPnP客户端)相同的进程(在测试包中)中运行,因此我决定将此UPnP服务器放在不同的APK中并使用Android的Messenger功能控制它。 / p>

我已经为另一个项目设置了这样的IPC,所以我从那里使用了一些代码,我能够成功地将测试(客户端)的消息发送到UPnP服务器。但是,测试无法从服务器接收任何消息。我在邮件的replyTo字段中发送客户端的Messenger对象,服务器正在使用此Messenger发回另一条消息 - 发送似乎成功,但没有任何内容到达客户端。如果客户端在服务器开始发送回复之前断开连接,那么在发送回复时接收器不可用时会出现异常。对我而言,这意味着用于回复的Messenger对象是正确的。

有没有人遇到过类似问题或知道这里有什么问题? 为什么这个Android IPC不能用于仪器(功能测试)? Android在测试包下处理代码有什么不同吗?

我认为没关系,但我正在使用Robotium进行测试。

1 个答案:

答案 0 :(得分:0)

所以问题结果是(当然)我的消息处理程序。 它是在测试的setUp()期间创建的,因此它是在Instrumentation Thread 上创建的。测试方法的执行在此Instrumentation Thread中再次完成(除非您注释它在UI线程上运行)。这意味着在执行测试方法时,无法执行消息处理程序,因此永远不会收到消息。

在新线程中创建处理程序(使用循环器),解决了我的问题。

此视频非常有助于提供有关IPC如何在Android中运行的更多信息,以及Messenger真正为您做的事情。 https://newcircle.com/s/post/1340/deep_dive_into_android_ipc_binder_framework_at_andevcon_iv