【问题标题】:Starting a service from application class [duplicate]从应用程序类启动服务[重复]
【发布时间】:2012-09-12 05:55:44
【问题描述】:

可能重复:
Can I startService from Application#onCreate()?

我们可以从应用程序类启动服务吗?

我想在我的应用程序启动时启动一项服务。因此,我可以使用我的应用程序类来代替从启动活动启动服务吗?谢谢。

我尝试的是内部应用程序类:

public void onCreate() {
    super.onCreate();


    Log.i("Logger", "Service Starting");
    Intent errorLoggerService = new Intent(getApplicationContext(),
            ErrorLoggerService.class);
    getApplicationContext().startService(errorLoggerService);
}

【问题讨论】:

  • 不强制从oncreate启动。我需要的是从 Application 类启动服务,以确保服务在我的应用程序启动时启动。

标签: android


【解决方案1】:

是的,您可以在 API 标签 26 之前执行此操作,但现在不行了。

如果您的 API 版本低于 26

public class MyApplication extends Application {
    public void onCreate() {
        super.onCreate();
        startService(new Intent(this, MyService.class));
    }
}

编辑 不要调用getApplicationContext(),只需调用startService()。另外,请确保您已在清单中声明了该服务。

适用于 API 标签 26 及以上

编辑 2 来自官方谷歌文档:https://developer.android.com/guide/components/services.html#StartingAService

注意:如果您的应用程序以 API 级别 26 或更高级别为目标,系统会限制使用或创建后台服务,除非应用程序本身位于前台。如果应用需要创建前台服务,应用应该调用 startForegroundService()。该方法创建了一个后台服务,但该方法向系统发出信号,该服务将把自己提升到前台。创建服务后,服务必须在五秒内调用其 startForeground() 方法。

因此,这些天来,您无法从 Application 启动后台服务。只有 GUI 组件能够启动后台服务。

或者,您可以从应用程序等后台组件启动前台服务。

【讨论】:

    【解决方案2】:

    是的,你可以使用 Intent 来启动你的服务,

    Intent serviceIntent = new Intent();
    serviceIntent.setAction("packagename.serviceName");
    context.startService(serviceIntent);    
    

    【讨论】:

    • @Lucifer 我认为(享有盛誉)您一定知道 Android 中的 Application class,但讽刺的是,您不知道 (you mean a normal .java class ?)。如果您不知道,这不是答案。
    • @Lucifer 他在问你是否可以在这里启动服务:developer.android.com/reference/android/app/Application.html。你不知道你在说什么。 :P
    • 如果你是新手,那么你一定不能自信地说YES。它是 .Java,但它扩展了 Application
    • 不知道为什么这个答案被否决了。 @hotveryspicy 是肤浅和悬疑的。问题是:我可以从我的应用程序类启动服务。路西法回答是,并展示了如何做。非常简单。
    • @LuxuryMode Lucifer 在上面的评论中说Basically I am new to Android, and in Java, Application class is .java that's why i thought like that. Ok i saw the above link, I have never worked with Application Class still,这让我很不舒服。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2011-05-22
    • 2011-04-04
    相关资源
    最近更新 更多