Как собрать информацию из IntentService и обновить пользовательский интерфейс Android

Я изучаю Android, и я застрял в своем сервисе.

Мое приложение подключается через Socket к моему серверу каждые X секунд, получает XML, анализирует информацию и показывает ее в TextView.

Я хотел бы знать, как я могу реализовать IntenService для этого и как передать информацию в пользовательский интерфейс. Мне очень трудно увидеть хорошие примеры.

Я ценю любую помощь, которую вы можете мне оказать.

Спасибо!


person Fabricio    schedule 24.10.2011    source источник


Ответы (1)


Используйте обработчик и отправьте сообщение родительской активности из службы намерений.

Родительская активность:

Объявление обработчика

Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
            Bundle reply = msg.getData();
                            // do whatever with the bundle here
            }
};

Вызов службы намерений:

        Intent intent = new Intent(this, IntentService1.class);
        intent.putExtra("messenger", new Messenger(handler));
        startService(intent);

Внутри IntentService:

    Bundle bundle = intent.getExtras();
    if (bundle != null) {
        Messenger messenger = (Messenger) bundle.get("messenger");
        Message msg = Message.obtain();
        msg.setData(bundle); //put the data here
        try {
            messenger.send(msg);
        } catch (RemoteException e) {
            Log.i("error", "error");
        }
    }
person Farhan    schedule 24.10.2011
comment
Мне нужно использовать AlarmManager для запуска службы каждые x секунд? - person Fabricio; 24.10.2011
comment
Большое спасибо Фархан! Я посмотрю. - person Fabricio; 24.10.2011
comment
поздравляю. вы использовали худшее имя переменной для этого примера: msg.setData(data); данные??? В самом деле? все данные... - person Moe Howard; 25.11.2015
comment
Что делать, если служба Intent запускается не из Activity, а из Application (для обновления данных каждые X секунд)? - person ozapa; 03.11.2017