2010-12-03 47 views
0

我有类似的问题,但答案并未完全解决我的问题。Android:在服务中调用某个方法(在同一活动中)

这是我正在做的事情:我有一个服务类,循环接收TCP连接。如果收到连接,可以读取一个字符串。它可以是其中的一个:“开始”或“停止”。当“START”进入时,我创建(启动)一个具有一些GUI的新活动,并且还有两个线程(一个发送UDP数据包并记录音频,另一个接收UDP并播放音频)。这个类包含2个套接字,一个AudioTrack对象和一个AudioRecord。

当Service类在TCP连接中收到一个“STOP”作为其数据时,我想调用该Activity类中的一个方法(不是创建一个新类),关闭这两个套接字并调用stop()和AudioTrack/AudioRecord对象上的release()。

现在,当我收到“停止”时,我只能创建一个全新的活动,所以这些对象不会被初始化。有没有一种方法,实际上调用以前启动的Activity中的方法?我能否保留对该活动(或意图)的参考,并简单地调用一个关于它的方法,还是必须更改我的整个设计?在这种情况下,欢迎提出建议。

谢谢

詹姆斯

回答

0

您可以设置START_FLAG_SINGLE_INSTANCE(我认为这就是它叫什么)的意图的标志,它会发送的意图已经运行的活动。然后,您可以在活动中的onNewIntent()中获得该意图。

或者,为什么没有服务管理套接字?

+0

我找不到标志或类似的东西,除了Intent.FLAG_ACTIVITY_SINGLE_TOP。不知道这是否是正确的。这将是一个很好的解决方案,但代码在两个客户端上运行,一个从服务启动活动,另一个从一个活动启动它,所以这是问题出现的地方。 – James 2010-12-03 22:43:02

0

根据我对活动和服务生命周期的理解,在我看来,您在活动中打开套接字的方法会给您带来问题。

如果用户旋转设备,您的Activity将被销毁,并且您的套接字连接在一起。一般来说,服务生命周期更适合解决您的问题。我同意法尔玛利的建议。

Reference

相关问题