Android - Выполнение сложных вычислений в фоновом режиме и возврат результата в Activity - PullRequest
0 голосов
/ 12 февраля 2012

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

Можно ли как-то общаться с Деятельностью, которая в данный момент уничтожена?Как изменение сохраненного состояния, так что когда оно будет восстановлено, результат будет отображаться.Единственный способ связи, который я нашел, был через трансляцию из Сервиса, но для этого требуется прослушивание Активности, что невозможно, так как не существует в момент завершения Сервиса.

Единственное решение, котороемне приходилось писать файл, когда Служба была завершена, а затем пытаться прочитать его в Деятельности, но я бы предпочел не работать с файловой системой, если это возможно.

Я что-то здесь упускаю или думаюв неправильном направлении?

Ответы [ 3 ]

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

Я бы использовал AsyncTask и возвратил бы значение из вашего вычисления в какое-нибудь хранилище с сохранением состояния (используйте класс Application или даже SharedPreferences).

Сделайте так, чтобы AsyncTask запустил вашу Активность по завершении, и получите значение, которое вы сохранили в соответствии с состоянием.

В основном, объедините первые 2 ответа, и вы должны быть установлены.

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

Вы можете просто написать в SharedPreference из Service.

. Activity может проверять предпочтения всякий раз, когда он запускается, и вы можете иметь некоторый маркер, чтобы указать, что результат был от вашеговычисление.

Вы также можете написать в тот же SharedPreference из Activity, чтобы аннулировать его, чтобы его можно было использовать для следующего результата.

...