小编Ker*_*rry的帖子

Android网络服务发现"超时"?

我在Android上使用网络服务发现(NSD)在设备上宣传REST服务器.我的REST服务器包含在android.app.Service的一个实例中.

onCreate,我成功启动REST服务器并注册我的NSD服务.我可以在我的网络中的其他设备上看到NSD服务名称(例如我的服务).

在我onDestroy,我停止REST服务器并取消注册NSD服务.

但是,似乎在开发时,当我推送我的应用程序的新实例(通过Eclipse)时,无法保证onDestroy将调用该服务.这意味着我的服务仍在广告中,下次服务开始时,我最终得到我的服务(1),我的服务(2)等.

据我所知,NSD将修改服务名称以创建一个唯一的实例.我的问题是:

  1. 如果广告服务不再存在,广告服务的预期超时时间是多少?
  2. onDestroy当我推送我的应用程序的新实例时,有没有办法确保我被调用?这种情况是否与用户在安装我的应用程序更新时可能遇到的情况类似?ie是否onDestroy保证在正在运行的应用程序关闭时调用,以便可以安装该应用程序的新版本?
  3. 我的应用程序中有没有办法检测旧注册并删除它们?

android android-nsd

19
推荐指数
2
解决办法
1615
查看次数

从IDL生成java(避免默认包)

我正在使用大型遗留C++代码库,其中包含许多IDL文件,这些文件具有在任何模块之外声明的所有类型和常量.

对于C++,这会导致代码生成到全局命名空间 - 丑陋但可以接受.

现在我正在尝试添加Java客户端以通过CORBA进行连接.但是,对于Java,从IDL生成的类型(使用适用于java的Sun/Oracle IDL编译器:idlj)位于java 默认包中,因为它们不在IDL模块中.这会导致Java编译错误,因为从默认包导入是非法的.

我正在寻找解决问题的最简单方法.

我考虑过以下几点:

  1. 在所有类型周围放置一个模块声明.我目前正在使用这个解决方案,但根据受影响的类型数量以及对大型遗留C++代码库的影响,这非常痛苦.
  2. 使用-pkgPrefix或-pkgTranslate选项.到目前为止,我无法弄清楚如何做到一般这个,因为你必须指定一个模块翻译来自或指定类型添加前缀.-pkgPrefix可以用于特定类型,但我们有数百种类型,我宁愿不为每个编译文件专门列出-pkgPrefix选项...
  3. 使用pragma指令?我不知道有人可以使用,但希望大师可以指明方向?
  4. ????

我发现如果没有包含所有类型的现有模块,很难相信没有简单的方法强制IDL在Java包中.我希望我只是错过了显而易见的事!

编辑:

  • IDL-to-Java编译器是idlj.
  • 添加了以下示例.
  • 更新了项目#2(上面),以澄清为每种类型使用-pkgPrefix是不可行的(除非它可以合理地编写脚本?)

例:


Foo.idl

struct Foo
{
  .
  .
  .
}
Run Code Online (Sandbox Code Playgroud)

Foo.java :( 注意没有指定包,这意味着默认包):

public final class Foo implements org.omg.CORBA.portable.IDLEntity
{
  .
  .
  .
}
Run Code Online (Sandbox Code Playgroud)

ClassUsesFoo.java:

package com.sigh;

import Foo;  // <-- this is an error
public class ClassUsesFoo
{
     private Foo f;
};
Run Code Online (Sandbox Code Playgroud)

java corba idl

7
推荐指数
1
解决办法
1819
查看次数

标签 统计

android ×1

android-nsd ×1

corba ×1

idl ×1

java ×1