是否可以在不启动的情况下创建服务?

时间:2011-02-17 12:34:33

标签: android

我想知道,是否可以创建Service,设置一些数据,然后启动它?我没有遇到过针对这个问题的线程,所以我想知道它是否可行(如果它当然是已知的)。

我的问题是我有一个Service来监听DatagramSocket,但是有问题的套接字需要在创建之后但在Service开始之前设置。套接字的设置通过使用Broadcast(I广播2 Strings来保存IP地址和端口而BroadcastReceiver然后为我构建套接字)。< / p>

启动Service时,Thread将开始运行并侦听所谓的创建套接字。遗憾的是,这不会发生。套接字将保持null,我无法在Thread运行时设置它(这是我希望将来解决的另一个问题,如果有人对此有任何想法,请通知我)

那么,我想要的是什么,或者我应该为实现这个目标想出另一种结构?

3 个答案:

答案 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;然后启用并启动它?