Ожидание завершения функции и использование результатов

Вот сценарий

У меня есть деятельность (A), которая имеет кнопку и просмотр текста. У меня есть другой класс (B) с методами для выполнения различных функций. После создания экземпляра класса B один из его открытых методов вызывается из A при нажатии кнопки. Этот метод занимает некоторое время для выполнения (он вызывает другие частные методы класса, требующие много времени) и возвращает значение одного из закрытых членов класса B.

Проблема в том, что метод возвращает начальное значение члена, а не значения после вычисления. Есть ли способ заставить функцию ждать некоторое время и возвращать значение члена вычисления?

public String getItem(){
        startFunction(); //Time consuming Function
        generateItem(); //Function which uses results of startFunction() to generate item and set values to mItem
        return mItem; //mItem is the private member of class B
    }

Возвращаемое значение всегда является значением по умолчанию mItem, т.е. значением, установленным в конструкторе. Время, требуемое функцией startFunction(WiFi Scanning), является произвольным. Любая помощь приветствуется.

2 ответа

Решение

Когда вы создаете экземпляр класса B, убедитесь, что он занимает Context в качестве аргумента в своем конструкторе. Тогда вы можете попробовать использовать AsyncTask (Предполагая, что вы это знаете). Затем поместите трудоемкую функцию в doInBackground() и функция, которая ждет своих значений в onPostExecute()

Разработка Android основана на событиях, обычно вы не должны блокировать потоки, ожидающие результата (по крайней мере, не основной поток / поток пользовательского интерфейса, поскольку ваше приложение может рассматриваться как не отвечающее).

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

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

Другие вопросы по тегам