我仍然对Android很新鲜,我认为以下配置适用于在应用启动时启动我的服务。
<service android:name=".PlaylistUpdaterService">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</service>
但事实并非如此。我错过了什么?
答案 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的有效方式。如果您执行以下操作,则可以获得相同的结果:
@android:风格/ Theme.NoDisplay
在AndroidManifest.xml中此Activity的Theme标签下。
onCreate()
开始服务。 finish()
中致电onStart()
以关闭它。因此,您的活动对用户来说是不可见的,很快就会发现并且没有人会注意到它已用于启动该服务。