2011-02-17 85 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屬性。是否有可能以編程方式禁用服務 - >創建它的一個實例 - >按照您認爲合適的方式初始化它 - >然後啓用並啓動它?

相關問題