我想知道,是否可以创建Service
,设置一些数据,然后启动它?我没有遇到过针对这个问题的线程,所以我想知道它是否可行(如果它当然是已知的)。
我的问题是我有一个Service
来监听DatagramSocket
,但是有问题的套接字需要在创建之后但在Service
开始之前设置。套接字的设置通过使用Broadcast
(I广播2 Strings
来保存IP地址和端口而BroadcastReceiver
然后为我构建套接字)。< / p>
启动Service
时,Thread
将开始运行并侦听所谓的创建套接字。遗憾的是,这不会发生。套接字将保持null
,我无法在Thread
运行时设置它(这是我希望将来解决的另一个问题,如果有人对此有任何想法,请通知我)
那么,我想要的是什么,或者我应该为实现这个目标想出另一种结构?
答案 0 :(得分:2)
我想知道,是否可以创建服务,设置一些数据,然后启动它?
没有
我的问题是我有一个监听DatagramSocket的服务,但是有问题的套接字需要在创建之后但在服务启动之前设置。
抱歉,你想要的不可能。
套接字的设置是通过使用广播(I广播2个字符串,其中包含IP地址和端口,然后BroadcastReceiver为我构建套接字)。
为什么不消除每个BroadcastReceiver
并使用startService()
通过Service
附加内容将IP地址和端口传递给Intent
?
答案 1 :(得分:0)
我现在以另一种方式解决了这个问题,我在DatagramSocket
的{{1}}方法中创建了onCreate
。我仍然使用Service class
来更新BroadcastReceiver
。
进一步说明:socket
创建的Service
使用Thread
,因此在编辑socket
之前我必须暂停Thread
。我使用socket
暂停Thread
(迫使所有volatile boolean
使用它,使用最近更新的版本或其他东西,我不是专家)。 Objects
调用Thread
方法暂停。将其从wait()
中取出需要在wait()
值上设置一个设置并调用boolean
。停止线程是通过修改另一个notify()
变量,然后调用volatile
上的interrupt()
方法将其从任何Thread
例程中删除来完成的。最终,这会导致sleep()
完成Thread
方法。
很抱歉让你对我如何停止或暂停/恢复run()
提出异议,但知道你是否知道该怎么做实际上很有用......我花了一段时间找到,所以我想我会和你分享......
答案 2 :(得分:0)
我非常猜测,但是当您在AndroidMainfest.xml
中定义服务时,您可以设置它的android:enabled
属性。是否可以以编程方式禁用该服务 - &gt;创建它的实例 - &gt;根据您的需要初始化它 - &gt;然后启用并启动它?