Поддержание обслуживания переднего плана с привязкой - PullRequest
4 голосов
/ 12 августа 2011

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

Оказывается, что даже если сервис работает на переднем планеОн все еще убит, когда все действия отвязаны от него.Как я могу сохранить службу, даже если с ней не связаны никакие действия?

1 Ответ

6 голосов
/ 12 августа 2011

Я немного удивлен, что это работает, но вы действительно можете позвонить startService() из службы, которую вы запускаете . Это все еще работает, если onStartCommand() не реализовано; просто убедитесь, что вы звоните stopSelf() для очистки в какой-то другой точке.

Пример службы:

public class ForegroundService extends Service {

    public static final int START = 1;
    public static final int STOP = 2;

    final Messenger messenger = new Messenger( new IncomingHandler() );

    @Override
    public IBinder onBind( Intent intent ){
        return messenger.getBinder();
    }

    private Notification makeNotification(){
        // build your foreground notification here
    }

    class IncomingHandler extends Handler {

        @Override
        public void handleMessage( Message msg ){
            switch( msg.what ){
            case START:
               startService( new Intent( this, ForegroundService.class ) );
               startForeground( MY_NOTIFICATION, makeNotification() );
               break;

            case STOP:
                stopForeground( true );
                stopSelf();
                break;    

            default:
                super.handleMessage( msg );    
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...