Android AIDL活动和服务问题

时间:2011-08-31 15:10:12

标签: android android-service aidl

我正在编写一个Android 2.1应用程序,当外部事件触发其中一个GPIO时,它应该向用户显示一个对话框。我编写了Linux设备驱动程序,并为其编写了JNI用户空间接口。 当我的应用程序启动时,它会启动一个轮询设备驱动程序的远程服务。使用aidl,我设法在活动和服务之间进行通信,但是,当我关闭活动时,我希望服务重新启动活动。 我使用以下代码实现了这一点:(在服务中)

Intent dialogIntent = new Intent(getBaseContext(),WiegandDemoActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(dialogIntent);

在那之后,我想使用aidl进行通信,所以我使用了:

synchronized (listeners) {
for (WiegandListener listener : listeners) {
    try {
         listener.handleWiegandUpdated();
...

活动被带到前面,但是援助信息没有到达。 为什么会这样? (当活动在前面时,一切正常)

我不想在这里发布所有代码,因为它很大,但如果您需要更多信息,请不要犹豫。

感谢。

1 个答案:

答案 0 :(得分:0)

您需要重新绑定到远程活动。在活动开始时将活动注册到服务是否切实可行 - 所以当您知道新活动已准备好接收传入消息时,会触发更新代码?

还要确保在活动结束时取消注册您的事件监听器 - 否则它会挂起。如果它包含对实际活动的引用,那么整个活动将保留在内存中并且不会收集垃圾(即使它已关闭并且您已创建新活动)。