没有活动的 Android 应用程序即服务

Posted

技术标签:

【中文标题】没有活动的 Android 应用程序即服务【英文标题】:Android application as a service without activity 【发布时间】:2014-08-10 00:56:49 【问题描述】:

我正在制作一组应用程序,我为所有应用程序提供几乎相同的后台服务。

我正在尝试制作一个只有这个Service 的应用程序。所以我不会在所有这些中重复它,但问题是不需要任何Activity。因为它不需要 UI,因此用户无法关闭它,除非他们停止 Service

我尝试删除Activity,但应用程序无法运行或启动。 我的问题是:我可以制作一个与Google Play Services 完全相同的应用程序,以便其他应用程序可以使用它的Service

如果是,那么非常欢迎使用 sn-p 或示例。

【问题讨论】:

在库项目中创建您的Service。不可能将Service 作为独立的“应用程序”单独使用。它需要用户通过Activity手动启动。 你不能开发任何只有服务的应用程序。 【参考方案1】:

当然!没有理由你不能拥有一个只有服务的应用程序。 ...除非您愿意,否则无需进入 AIDL。

问题是,如何让应用程序运行。当您使用 Activity 创建应用程序时,您会在清单中添加一个 Intent 过滤器,使 Activity 可以从 Launcher 启动。如果没有活动,则必须找到另一种方式来启动它。

不过,这很容易做到。只需从您的其他程序中触发一个意图,如下所示:

startService(new Intent("my.service.intent"));

...服务在哪里注册您的清单,如下所示:

        <service android:name=".SomeService" >
          <intent-filter>
            <action android:name="my.service.intent"/>
          </intent-filter>

您可以使用该 Intent 将 Parcelable 参数传递给服务,该服务可以通过广播回 Intent 进行回复。

当然,如果您确实需要在应用程序和您的服务之间建立一个复杂的 API,那么 startService 和 broadcastIntent 就有点笨拙了。如果您需要更丰富的东西,您想要研究 AIDL 和绑定服务。

已编辑以添加 Intent 过滤器

【讨论】:

感谢您的回答,非常有用。我实际上想知道如何调用该服务。我向服务(应用程序)添加了一个 BroadcastReceiver 并让它在启动时启动,这应该解决服务启动的火灾事件。 @ilyas 是的,应该可以。但是请记住,仅仅因为您在启动时启动它并不意味着它会保持运行。 Android 最终会杀死它。此外,您可以通过仅在实际需要时运行服务来最大限度地减少电池使用...... 如何在 Android Studio 中做到这一点?我不允许创建没有活动的应用程序... 我不明白这是如何解决问题的,您仍然从一个活动启动后台服务,只是从该应用程序中的一个活动开始。 对不起,我的意思是“只是不是来自该应用程序中的活动”。我假设 OP 和我一样,正在寻找一种在启动时启动服务的方法,而无需用户打开任何应用程序。不过我找到了一种使用广播接收器的方法。

以上是关于没有活动的 Android 应用程序即服务的主要内容,如果未能解决你的问题,请参考以下文章

Android 以编程方式包含布局(即没有 XML)

是否需要为具有活动 LocationListener 的 Android 服务获取唤醒锁?

Android应用程序/进程的生命周期?

Android - 不活动/活动,无论***应用程序

Google Play 服务活动识别断开连接且没有任何错误

Android销毁活动,杀死进程