Android服务无法启动

Nic*_*oie 0 service android

我面临的奇怪问题.我想在创建活动时启动服务.这是我的服务代码(很简单,你会看到):

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();
}
}
Run Code Online (Sandbox Code Playgroud)

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

<service android:name=".ServiceSynchro"></service>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Nic*_*oie 9

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

<service android:name=".ServiceSynchro"></service>
Run Code Online (Sandbox Code Playgroud)

当我需要时:

<service android:name="com.xxx.service.ServiceSynchro"></service>
Run Code Online (Sandbox Code Playgroud)

对于对文档中的应用程序感兴趣的人,这里是查看它的链接.

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

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

public int onStartCommand(Intent intent, int flags, int startId)
Run Code Online (Sandbox Code Playgroud)


Com*_*are 5

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

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