我有一个带有处理程序的服务,该服务器必须每5秒在logcat中写入“Hello”。但它没有在logcat上写任何东西......就像服务没有执行一样,我在它上面放了一个断点,调试模式永远不会在断点上停止。
我在我的应用的第一个活动中启动了这项服务:
startService(new Intent(GPSLoc.this, MyServiceNotifications.class)); //enciendo el service
我确信代码startService
已执行,因为它在启动另一个活动之前被调用,而另一个活动开始。
这是我服务的代码:
public class MyServiceNotifications extends Service {
boolean serviceStopped;
private Handler mHandler;
private Runnable updateRunnable = new Runnable() {
@Override
public void run() {
if (serviceStopped == false)
{
createNotificationIcon();
}
queueRunnable();
}
};
private void queueRunnable() {
// 600000 : cada 10 minutos, comprueba si hay nuevas notificaciones y actualiza la
// notification BAR
mHandler.postDelayed(updateRunnable, 5000);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
serviceStopped = false;
// //////////////////////////////////////MANEJADOR SIMILAR A UN HILO
mHandler = new Handler();
queueRunnable();
// ///////////////////////////////////// FIN MANEJADOR
}
@Override
public void onDestroy() {
serviceStopped = true;
}
@Override
public void onStart(Intent intent, int startid) {
}
public void createNotificationIcon()
{
Log.d("MyServiceNotifications", "Hello");
}
}
答案 0 :(得分:173)
您是否在AndroidManifest.xml
声明了服务?
答案 1 :(得分:62)
非常重要:正确编写名称空间,例如:
<service android:name="com.example.data.synchronization.SynchronizationService"/>
在我的AndroidManifest.xml
之前它是(错误的):
<service android:name="com.example.data.SynchronizationService"/>
没有服务启动和没有错误消息!
答案 2 :(得分:16)
你写的代码很好。关闭应用程序标记之前,可能会忘记清单文件中的以下代码。
<application>
....
<service android:name=".MyServiceNotifications"/>
</application>
答案 3 :(得分:8)
在清单中定义它时,还需要将“enabled”属性设置为“true”,如下所示:
<service android:enabled="true" android:name=".MyServiceNotifications" />
有关详细信息,请参阅此链接:http://developer.android.com/guide/topics/manifest/service-element.html
答案 4 :(得分:1)
如果使用Xamarin Droid,最简单的方法是将类标记为这样的服务:
[Service]
public class LongRunningTaskService : Service
{
...
}
然后没有必要将它放在AndroidManifest.xml中。
答案 5 :(得分:0)
非常罕见的情况。但是在处理多进程应用程序时,活动和服务需要在 android:process
Manifest.xml
EG: RemoteServiceBindingActivity.kt
startService(Intent(this, RemoteService::class.java))
然后
<activity
android:name=".RemoteServiceBindingActivity"
android:process=":test" />
<service
android:name=".RemoteService"
android:enabled="true"/>
没用。我也必须在 Manifest 中将 android:process=":test"
添加到服务中,如下所示:
<service
android:name=".RemoteService"
android:enabled="true"
android:process=":test"/>