Служба Android не запускается - PullRequest
0 голосов
/ 01 января 2012

Странная проблема, с которой я сталкиваюсь.Я хочу запустить Сервис, когда моя активность будет создана.Вот код моей Службы (как вы видите, очень простой):

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>

Окончательно, чтобыЗапустив мой Сервис, я вызываю метод startService в onCreate:

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

И ничего не происходит.Если я проверяю работающие службы устройства, ни одна служба с именем ServiceSyncho не работает.Если я проверяю Logcat, ничего не выводится.То же самое для точек останова, приложение не проходит цикл через события жизненного цикла Сервиса.Есть идеи, в чем может быть моя проблема?

Ответы [ 3 ]

9 голосов
/ 02 января 2012

Я нашел проблему.В моем файле AndroidManifest.xml атрибут service: name не ссылался на полное имя класса службы.Например, я использовал это:

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

Когда мне было нужно:

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

Для людей, заинтересованных в приложении из документации, вот ссылка для просмотра.

android: name Имя подкласса Service, который реализует сервис.Это должно быть полное имя класса (например, «com.example.project.RoomService»).Однако для краткости, если первый символ имени является точкой (например, «.RoomService»), он добавляется к имени пакета, указанному в элементе.

Наконец, яобновлен код для переопределения команды onStartCommand, поскольку метод onStart устарел.

public int onStartCommand(Intent intent, int flags, int startId)
5 голосов
/ 01 января 2012

Избавьтесь от своего конструктора.Никогда не реализуйте конструктор в компоненте (единственное текущее исключение: IntentService).

Кроме того, когда вы реализуете конструкторы в другом месте в Java, цепочка к суперклассу.

0 голосов
/ 18 февраля 2012

Я искал везде, когда мой сервис не запускался.Ничего не получилось. Наконец, отладка третьего часа я обнаружил, что мое имя пакета не соответствует стандартному формату имен пакетов xx.xx.xx. Я исправил, и это сработало.Для вашей информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...