我有一个类似的问题,但答案并没有完全解决我的问题。
这是我想要做的:我有一个Service类循环接收TCP连接。如果收到连接,则可以读取字符串。它可以是这两个中的一个:“START”或“STOP”。
当“START”进入时,我创建(启动)一个具有一些GUI的新活动,还有两个线程(一个发送UDP数据包并记录音频,另一个接收UDP并播放音频)。该类包含2个套接字,一个AudioTrack对象和一个AudioRecord。
当Service类在TCP连接中收到“STOP”作为其数据时,我想在Activity类中调用一个方法(不创建一个新方法),关闭这两个套接字并调用stop()和在AudioTrack / AudioRecord对象上发布()。
现在,当我收到“停止”时,我只能创建一个全新的活动,因此这些对象不会被初始化。有没有办法,实际调用以前启动的Activity中的方法?我可以保留对该活动(或意图)的引用,只需调用一个方法,或者我是否必须更改我的整个设计?在这种情况下,建议会受到欢迎。
谢谢,
詹姆斯
答案 0 :(得分:0)
您可以在意图标记中设置START_FLAG_SINGLE_INSTANCE
(我认为这就是它的名称),它会将意图发送到已经运行的活动。然后,您可以在活动中的onNewIntent()中获取该意图。
或者,为什么不让服务管理套接字?
答案 1 :(得分:0)
鉴于我对活动和服务生命周期的理解,在我看来,在Activity中打开套接字的方法会给你带来麻烦。
如果用户旋转设备,您的Activity将被销毁,并且您的套接字连接也会被破坏。一般来说,服务生命周期更适合解决您的问题。我同意Falmarri的建议。