如何在应用启动时启动Android服务?

时间:2010-12-17 04:06:45

标签: android

我仍然对Android很新鲜,我认为以下配置适用于在应用启动时启动我的服务。

    <service android:name=".PlaylistUpdaterService">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </service>

但事实并非如此。我错过了什么?

2 个答案:

答案 0 :(得分:22)

错误!扩展Application类(IE自己创建),然后在onCreate()方法中执行此操作。

//Service is below
Intent serviceIntent = new Intent(getApplicationContext(), PlaylistUpdaterService.class);
startService(serviceIntent);

并从清单文件中的声明中获取该意图过滤器废话。保留为

<service android:name=".PlaylistUpdaterService">

以下意图过滤器只需在您的家庭活动中

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> 

你这样做的原因是因为Application类是在应用程序启动后立即启动的,并且充当了android框架管理的全局类。

实际上,如果您希望每次返回主屏幕时都运行该服务,则应在您的家庭班级onResume()中启动该服务。将它放在应用程序onCreate()中只会在用户第一次启动时或在运行进程被终止后启动服务。或者你可以将它放在你的家庭班级onCreate()中,但这甚至不能保证每次都运行。

答案 1 :(得分:8)

如果我错了,请纠正我,但android.intent.category.LAUNCHER仅对Activity有效。所以,看起来不像是启动Service的有效方式。如果您执行以下操作,则可以获得相同的结果:

  • 创建仅用于启动服务的透明活动
  • 对于该Activity,您不需要指定GUI布局。因此,您不需要在活动的onCreate()中设置setContentView()。你唯一需要的就是把

@android:风格/ Theme.NoDisplay

在AndroidManifest.xml中此Activity的Theme标签下。

  • 从您的活动的onCreate()开始服务。
  • 在您的活动的finish()中致电onStart()以关闭它。

因此,您的活动对用户来说是不可见的,很快就会发现并且没有人会注意到它已用于启动该服务。