2011-02-17 45 views
0

我想知道,是否可以创建Service,设置一些数据,然后启动它?我还没有遇到特定于此问题的线索,所以我想知道是否有可能(如果它是已知的)。是否有可能创建一个服务而不启动它?

我的问题是我有一个Service它听一DatagramSocket,但需要在创建后,但在Service开始之前设置有问题的套接字。套接字的设置通过使用Broadcast(我广播2 Strings,其中包含IP地址&端口和BroadcastReceiver然后为我构建套接字)发生。

Service启动时,Thread将开始运行并收听假定创建的套接字。可悲的是,这并没有发生。套接字将保持null,当Thread正在运行时,我无法设置它(这是我希望将来要解决的另一个问题,如果有人对此有任何想法,请通知我)。

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

回答

0

我现在用另一种方式解决了问题,我在Service classonCreate方法中创建了DatagramSocket。但我仍然使用BroadcastReceiver来更新socket

在进一步注:Service创建Thread,它使用socket,所以我不得不编辑socket之前挂起Thread。我已经使用volatile boolean(它强制所有使用它的Objects,使用最近更新的版本或其他东西,我不是专家)暂停ThreadThread调用wait()方法挂起。将其从wait()中取出需要设置boolean的值,并调用notify()。停止线程是通过修改另一个volatile变量,然后调用Thread上的interrupt()方法来将其从任何sleep()例程中取出。最终这会导致Thread完成它的run()方法。

对不起,如何我停止或暂停/恢复Thread,但它确实有用,知道如果你不知道如何做到这一点......我花了一段时间才发现,所以我想我会分享给你...

2

我想知道,是否可以创建一个服务,设置一些数据,然后启动它?

我的问题是,我有听一个DatagramSocket服务,但需要创建后,设置有问题的插座,但服务开始之前。

对不起,你想要什么是不可能的。

插座的设置,结果会通过使用广播的(我播2串持有的IP地址&港和广播接收器,然后构建一个插座对我来说)。

为什么不能消除所有的BroadcastReceiver和使用startService()通过Intent群众演员通过IP地址和端口的Service

+0

因为我希望套接字是可编辑的。当我在配置活动中设置不同的端口时,我希望套接字使用新端口进行更新,因此广播... – ThaMe90 2011-02-17 12:49:02

+2

@ ThaMe90:使用`SharedPreferences`和`OnSharedPreferenceChangeListener`。 – CommonsWare 2011-02-17 12:59:36

0

我很猜这里,但是当你在AndroidMainfest.xml中定义你的服务时,你可以设置它的android:enabled属性。是否有可能以编程方式禁用服务 - >创建它的一个实例 - >按照您认为合适的方式初始化它 - >然后启用并启动它?

相关问题