Android IntentService никогда не вызывался

У меня есть IntentService, который я хочу запустить onCreate. Это огонь и забыть, что делает звонок на сайт, а затем (возможно) начинает загрузку через менеджер загрузки. Я не верю, что моя служба запускается, потому что я не вижу от нее никаких отчетов в журнале. У меня есть служба в моем манифесте, тот же пакет, что и основной. Он также не отображается в моем логарифме (другой поток сказал, что должен).

при создании:

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    Intent heartbeat = new Intent(this, Heartbeat.class);
    startService(heartbeat);
}

* Я также пробовал this.startService(heartbeat); и тоже не получилось.

манифест:

<application
    android:debuggable="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <service android:name=".Heartbeat" android:enabled="true"/>

    <activity
        android:name=".MainActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:label="@string/title_activity_main" >

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

* с андроидом или без: флаг включен не имеет значения

запуск IntentService:

public class Heartbeat extends IntentService
{
    public Heartbeat()
    {
        super("Heartbeat");
        Log.v("SUPER", "SUPER");
    }

    @Override
    protected void onHandleIntent(Intent intent)
    {
        Log.v("HERE", "HERE");
        //do other stuff

Ни один из этих операторов журнала не отображается в console/logcat, и моя служба никогда не обращается к веб-серверу (этот код ранее находился в асинхронной задаче и функционировал). Любые идеи о том, что я делаю неправильно?

Изменить. Я вижу предупреждение от тега ActivityManager во всех моих сообщениях, в котором говорится: «Невозможно запустить службу Intent {act=com.example.vs_1.Heartbeat}: не найдено». Однако почти каждое предложение, которое я видел в этом сообщении, заключалось в том, чтобы поместить манифест в тег приложения, что я уже сделал.


person s.field212    schedule 01.11.2012    source источник
comment
Я также пытался превратить Heartbeat.class и .Heartbeat в Main/manifest, соответственно, в их длинные имена com.whatever, но безрезультатно.   -  person s.field212    schedule 01.11.2012
comment
С вашим кодом все в порядке. Я полагаю, у вас что-то не так в консоли журнала;) (вы уверены, что фильтр для подробных сведений (вы вызываете Log.v()) и ваше приложение установлено в настройках консоли? Вы используете eclipse или автономную ddms?)   -  person Tomasz Gawel    schedule 02.11.2012
comment
Конечно, я могу добавить Log.v(ПОСЛЕ, ПОСЛЕ); в строке после startService, и я вижу это в logcat. Я использую затмение. Итак, если код кажется правильным, какие у меня есть варианты? Я хочу использовать IntentService, потому что это кажется идеальным вариантом, но я думаю, что мог бы вернуть его как асинтаск, который работал ранее сегодня.   -  person s.field212    schedule 02.11.2012
comment
Если ваш класс Heartbeat на самом деле com.example.vs_1.Heartbeat (я думаю, из предупреждения: act=com.example.vs_1.Heartbeat, not found), вы должны объявить его в манифесте как <service android:name=".vs_1.Heartbeat" android:enabled="true"/>, если пакет приложения com.example   -  person Tomasz Gawel    schedule 02.11.2012
comment
Пробовал и так, не работает, но немного меняет предупреждение. С name=.vs_1.Heartbeat в манифесте предупреждение становится Невозможно запустить службу Intent { cmp=com.example.vs_1/.MainActivity.Heartbeat }: не найдено. / является новым. Это дает какие-то подсказки? Я также попытался сделать приложение с минимальным кейсом, но безуспешно, отредактировав основной пост, чтобы включить его.   -  person s.field212    schedule 02.11.2012
comment
Подождите, а почему ваш сервис относится к внутреннему классу деятельности??? вы не можете указывать на нестатический внутренний класс в манифесте   -  person Tomasz Gawel    schedule 02.11.2012
comment
переместите класс обслуживания в отдельный файл: com.example.test_intent.Heartbeat и измените в манифесте на: <service android:name=".Heartbeat" android:enabled="true"/>   -  person Tomasz Gawel    schedule 02.11.2012


Ответы (2)


О, сюжет закручивается!

«Невозможно запустить службу» — это ошибка, хотя она помечена как предупреждение.

Это происходит из-за того, что система не может найти класс с указанным именем. В данном случае это com.example.vs_1.Heartbeat.

Чтобы убедиться, что у вас есть этот класс, вам нужен файл Hearbeat.java, который содержит

пакет com.example.vs_1;

открытый класс Heartbeat расширяет IntentService...

В вашем манифесте, если ваш элемент содержит атрибут package="com.example.vs_1", вы можете сказать

Обратите внимание на точку (".") перед "Heartbeat".

Если вы используете другое значение для «пакета», вы должны сказать

/com.example.vs_1.Heartbeat», где — значение «package».

Из этого должно быть ясно, что вы должны выбрать одно основное имя пакета для своих классов и использовать то же имя для значения «пакет».

person Joe Malin    schedule 01.11.2012
comment
Вот и все, как только я поместил его в другой файл Heartbeat.java, все заработало. Мне кажется странным, что он не нашел его в файле MainActivity.java. У меня недостаточно представителей, чтобы проголосовать за вас, но когда я это сделаю, я обязательно это сделаю. - person s.field212; 02.11.2012

Вы уверены, что основная активность запускается правильно? LogCat покажет вам сообщения об ошибках, если система не сможет запустить ваш IntentService. Кроме того, это «подробные» сообщения, поэтому убедитесь, что LogCat настроен на их отображение. Если для LogCat установлено значение «ошибка», подробные сообщения отображаться не будут.

person Joe Malin    schedule 01.11.2012
comment
Насколько я знаю, он запускается правильно. Мое приложение запускается и показывает мне мою пустую страницу. Я также могу сделать Log.v(ПОСЛЕ, ПОСЛЕ); сразу после запуска службы, и я вижу этот вывод. Я также понял, что во всех моих сообщениях из тега ActivityManger я вижу это предупреждение (но не ошибку...) Невозможно запустить службу Intent {act=com.example.vs_1.Heartbeat}: не найдено. Однако поиск в Google не принес никаких предложений, кроме тех, которые я видел. Итак, я думаю, я, по крайней мере, подтвердил, что он не запускается правильно. - person s.field212; 02.11.2012