我在我的android应用程序上运行了一个服务,该服务是一个必须在整个应用程序中运行的套接字类,我在第一个活动加载时创建它。 如何获取此套接字类的实例,以便我可以在此类中调用函数。
For example
//how can i get an instance of the running service?
MyService s = getService();
s.writeDataToServer("hello");
答案 0 :(得分:2)
有两种方法可以执行此操作,具体取决于您是否希望在用户未主动使用UI时保持套接字打开。
第一个是LocalService
它与常规Service
相同,除了它与您的Activity
UI线程在同一个进程中运行,因此您可以直接引用它。与使用AIDL相比,这是创建和使用服务的轻松方法。如果您希望创建需要由应用程序中的不同进程或不同应用程序访问的进程外服务,我建议您仅使用AIDL。这很可能不是你需要的。 LocalService方法允许您使服务在后台运行,并且即使在不使用UI时也会保持套接字打开。
如果您没有要求保持套接字打开并且只希望从多个Activity
访问它,那么您可以扩展Application
类并在清单中注册它。它允许您管理全局应用程序状态。您可以将套接字创建和管理功能放入该类,然后为各种Activity
提供访问它的方法。当进程终止时,Application
类将死亡,因此不适合长时间保持套接字打开或者在用户未主动使用您的应用程序时。
内置Activity#getApplication()
方法有助于此过程。您可以通过android:name
属性在AndroidManifest.xml中指定自定义Application
类。
答案 1 :(得分:1)
Android界面定义语言(AIDL)是连接服务的正确方法。
查看http://developer.android.com/guide/developing/tools/aidl.html
有关如何与服务进行通信的信息。
答案 2 :(得分:1)
查看Intents
和bindService
方法。