Android服务无法启动

时间:2011-12-31 21:06:31

标签: android service

我面临的奇怪问题。我想在创建活动时启动服务。这是我的服务代码(非常简单,正如您将看到的):

package com.nblmedia.service;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class ServiceSynchro extends Service {

public ServiceSynchro()
{
    Log.i(XXX.LOG, "ServiceSynchro");
}

@Override
public IBinder onBind(Intent intent) {
    Log.i(XXX.LOG, "onBind");
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    // TODO Auto-generated method stub
    Log.i(XXX.LOG, "onCreate");
    super.onCreate();
}

@Override
public void onDestroy() {
    Log.i(XXX.LOG, "onDestroy");
    // TODO Auto-generated method stub
    super.onDestroy();
}
}

在我的AndroidManifest.xml中,我已将服务声明如下:

<service android:name=".ServiceSynchro"></service>

最后,为了启动我的服务,我在onCreate中调用了startService方法:

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    startService(new Intent(UserMenuActivity.this, ServiceSynchro.class));      
}

没有任何反应。如果我检查设备的运行服务,则没有运行名为ServiceSyncho的服务。如果我检查Logcat,则不输出任何内容。对于断点而言,应用程序不会循环通过服务的生命周期事件。知道什么可能是我的问题吗?

3 个答案:

答案 0 :(得分:9)

我发现了问题。在我的AndroidManifest.xml文件中,service:name属性未引用服务的完全限定类名。例如,我正在使用它:

<service android:name=".ServiceSynchro"></service>

当我需要时:

<service android:name="com.xxx.service.ServiceSynchro"></service>

对于对文档中的应用程序感兴趣的人,here is the link可以查看它。

  

<强>机器人:名称   实现服务的Service子类的名称。这应该是一个完全限定的类名(例如“com.example.project.RoomService”)。但是,作为简写,如果名称的第一个字符是句点(例如“.RoomService”),则它将附加到元素中指定的包名称。

最后,我更新了代码以覆盖onStartCommand命令,因为不推荐使用onStart方法。

public int onStartCommand(Intent intent, int flags, int startId)

答案 1 :(得分:5)

摆脱你的构造函数。永远不要在组件中实现构造函数(唯一的当前例外:IntentService)。

此外,当你在Java中的其他地方实现构造函数时,链接到超类。

答案 2 :(得分:0)

当我的服务没有开始时,我到处寻找。 没有任何结果。第三个小时的最终调试ı发现我的包名称不是标准格式的xx.xx.xx包名。我修复了它的工作原理。 供您参考。