Служба Android останавливается без уведомления? - PullRequest
0 голосов
/ 07 ноября 2010

У меня странная ситуация, когда созданная служба останавливается - иногда. У меня есть запись Activity A, которая запускает службу, используя bindService

// if we now have an IP address then bind ourselves to the MessageService
bindService(new Intent(this, MessagingService.class), 
            onMessageService,
            BIND_AUTO_CREATE);

MessageService обрабатывает потоки Чтение и Отправка для обработки трафика сообщений с приложением. В основном он обрабатывает новые сообщения с интервалом в 1 секунду, используя StatusTask, а таймер - timer.scheduleAtFixedRate.

Деятельность A затем запускает другую Деятельность B, которая отображает информацию для пользователя. По какой-то причине, которую мне еще предстоит выяснить, в большинстве случаев, когда я нажимаю кнопку «Домой», опрос останавливается, и служба, похоже, останавливается. Выбор моего приложения из списка последних приложений Home или через уведомление, которое я публикую, когда он не виден, выводит Активность на первый план, но Сервис, похоже, исчез. Это затрудняет отладку, примерно в 10-20% случаев все работает отлично, а служба опроса сообщений продолжает отключаться.

Должен ли я использовать startService вместо этого? Единственное прямое отношение, которое вторая активность B имеет к Сервису, заключается в том, что он регистрируется в качестве наблюдателя потока Read, чтобы получать уведомления о тайм-аутах на Reads. Я не вызываю stopService нигде в моем коде.

Ответы [ 4 ]

1 голос
/ 07 ноября 2010

открытый класс Testservice расширяет службу {

приватная статическая конечная строка TAG = Testservice.class.getSimpleName ();

открытый таймер таймера;TimerTask scanTask;окончательный обработчик обработчика = новый обработчик ();Timer t = new Timer ();

@Override
public IBinder onBind(Intent intent) {
    return null;

}

@Override
public void onCreate() {
    super.onCreate();
    Log.i(TAG, "Service creating");
    _startService();
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.i(TAG, "Service destroying");

    t.cancel();
    t = null;
}

public void yourfunction () {

}

// это вызовет функцию каждую секунду, поэтому попробуйте ееэто помогает публичной void _startService () {

    scanTask = new TimerTask() { 
            public void run() { 

                    handler.post(new Runnable() { 
                            public void run() { 

                                yourfunction();

                            } 
                   }); 
            }}; 

            t.schedule(scanTask, 1000L, 1000L);  
}
1 голос
/ 07 ноября 2010

Запуск службы с bbindService привязывает жизненный цикл службы к связанным действиям. Как только ваша деятельность отсоединяется от сервиса, сервис умирает.

1 голос
/ 07 ноября 2010

при разработке с использованием eclipse ---> попробуйте перейти в DDMS, который будет в опции перспективы в строке меню ---> выберите Logcat, и пока вы запускаете приложение, просто попробуйте повторить последовательность, которую вы только что упомянули выше, ипри нажатии кнопки «домой» просто посмотрите, что это за ошибка, если она вообще появляется, и опубликуйте сообщение об ошибке, чтобы понять конкретную причину

С уважением, Мисти Хардик

0 голосов
/ 07 ноября 2010

простой сервис демо-класса

импорт android.app.Activity; импорт android.content.Intent; импорт android.os.Bundle; импорт android.util.Log; импорт android.view.View; import android.view.View.OnClickListener; импорт android.widget.Button;

открытый класс ServicesDemo расширяет Activity реализует OnClickListener {

private static final String TAG = "AlertService";
Button buttonStart, buttonStop;

@ Override public void onCreate (BundlevedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.servicedemo);

buttonStart = (Button) findViewById(R.id.btnStart);
buttonStop = (Button) findViewById(R.id.btnStop);

buttonStart.setOnClickListener(this);
buttonStop.setOnClickListener(this);

}

public void onClick (View src) { switch (src.getId ()) { case R.id.btnStart: Log.d (TAG, "onClick: стартовый сервис"); startService (новый Intent (это, Testservice.class)); перерыв; case R.id.btnStop: Log.d (TAG, "onClick: остановка службы"); stopService (новый Intent (это, Testservice.class)); перерыв; } } }

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