为什么这个简单的服务无法启动?

时间:2011-01-21 14:04:10

标签: android service

我有一个带有处理程序的服务,该服务器必须每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");
    }    
}

6 个答案:

答案 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"/>