Android 安卓==>;服务问题?

Android 安卓==>;服务问题?,android,service,Android,Service,我在android应用程序上运行了一个服务,该服务是一个套接字类,必须在整个应用程序中运行,我在加载第一个活动时创建它。 如何获取该套接字类的实例,以便调用该类中的函数 For example //how can i get an instance of the running service? MyService s = getService(); s.writeDataToServer("hello"); Android接口定义语言(AIDL)是连接到服务的正确方式 退房 有关如何与服务通

我在android应用程序上运行了一个服务,该服务是一个套接字类,必须在整个应用程序中运行,我在加载第一个活动时创建它。 如何获取该套接字类的实例,以便调用该类中的函数

For example
//how can i get an instance of the running service?
MyService s = getService();
s.writeDataToServer("hello");

Android接口定义语言(AIDL)是连接到服务的正确方式

退房


有关如何与服务通信的信息。

Android界面定义语言(AIDL)是连接到服务的正确方式

退房


有关如何与服务通信的信息。

签出和方法。

签出和方法。

有两种方法可以执行此操作,具体取决于用户未积极使用UI时是否希望保持套接字打开

第一个是,它与常规的
服务
相同,只是它与您的
活动
s UI线程在同一进程中运行,因此您可以获得对它的直接引用。这是一种比使用AIDL更轻松的创建和使用服务的方法。仅当您希望创建需要由应用程序中的不同进程或不同应用程序中的不同进程访问的进程外服务时,我建议使用AIDL。这很可能不是你需要的。LocalService方法将允许您保持服务在后台运行,从而使套接字保持打开状态,即使UI未被使用

如果您不需要保持套接字打开,并且只希望从多个
活动
访问它,那么您可以扩展该类并将其注册到清单中。它允许您管理全局应用程序状态。您可以将套接字创建和管理功能放入该类中,然后为各种
活动提供方法以访问它。
应用程序
类在进程终止时终止,因此它不适合在长时间内或在用户未积极使用应用程序时保持套接字打开


有一个内置的方法可以帮助完成这个过程。您可以通过属性在AndroidManifest.xml中指定自定义的
应用程序
类。

有两种方法可以执行此操作,具体取决于您是否希望在用户未积极使用UI时保持套接字打开

第一个是,它与常规的
服务
相同,只是它与您的
活动
s UI线程在同一进程中运行,因此您可以获得对它的直接引用。这是一种比使用AIDL更轻松的创建和使用服务的方法。仅当您希望创建需要由应用程序中的不同进程或不同应用程序中的不同进程访问的进程外服务时,我建议使用AIDL。这很可能不是你需要的。LocalService方法将允许您保持服务在后台运行,从而使套接字保持打开状态,即使UI未被使用

如果您不需要保持套接字打开,并且只希望从多个
活动
访问它,那么您可以扩展该类并将其注册到清单中。它允许您管理全局应用程序状态。您可以将套接字创建和管理功能放入该类中,然后为各种
活动提供方法以访问它。
应用程序
类在进程终止时终止,因此它不适合在长时间内或在用户未积极使用应用程序时保持套接字打开


有一个内置的方法可以帮助完成这个过程。您可以通过属性在AndroidManifest.xml中指定自定义的
应用程序
类。

1问题,我目前处理这个问题的方式(服务和活动之间的通信),是使我的服务中的每个对象和方法都是静态的。这是一种与服务通信的糟糕方式吗?例如,每次加载活动时,我都执行MyService.setMainActivity(此);因此,我将活动的一个实例传递给服务类中的一个静态变量。当我想从活动向服务器发送消息时,我调用服务类中的静态方法。SendDataToServer(“你好”);这是一种与我的服务沟通的糟糕方式吗?是的,这是一种非常糟糕的做事方式。服务或活动可能会在您不知情的情况下被终止。然而,如果你在Android中使用IPC框架,它将确保不会发生这种情况,或者如果发生了,它将优雅地处理它。从长远来看,使用AIDL接口要容易得多。这可能看起来让人望而生畏,但如果你花几分钟通读它,实际上是相当容易的。@aryaxt啊,是的,谢谢你!看起来确实有人投了反对票,我很好奇他们为什么这么做。我很高兴这是有益的!我目前处理这个问题的方式(服务和活动之间的通信)是使服务中的每个对象和方法都是静态的。这是一种与服务通信的糟糕方式吗?例如,每次加载活动时,我都执行MyService.setMainActivity(此);因此,我将活动的一个实例传递给服务类中的一个静态变量。当我想从活动向服务器发送消息时,我调用服务类中的静态方法。SendDataToServer(“你好”);这是一种与我的服务沟通的糟糕方式吗?是的,这是一种非常糟糕的做事方式。服务或活动可能会在您不知情的情况下被终止。然而,如果你在Android中使用IPC框架,它将确保不会发生这种情况,或者如果发生了,它将优雅地处理它。从长远来看,使用AIDL接口要容易得多。这可能看起来让人望而生畏,但如果你花几分钟通读它,其实很容易