Я опоздал на вечеринку на несколько лет, но, похоже, на этот вопрос никогда не отвечали в предоставленном контексте.В вопросе говорится, что для запуска следующей строки кода требуется до 50 мсек:
connection.getTextBeforeCursor(Integer.MAX_VALUE, 0).length()
Это, вероятно, связано с тем, что реализация Android метода getTextBeforeCursor(int, int)
, по-видимому, пытается создать экземпляр массива CharSequence
.длиной n до поиска запрошенных символов.В этом случае он пытается создать экземпляр массива длиной Integer.MAX_VALUE
.Фактический возвращенный массив обрезается до соответствующего размера.
Я использовал аналогичный метод для получения позиции курсора из InputConnection
, но ограничил значение n домаксимальное значение, которое я контролирую.Итак, если я установлю максимальное количество символов для EditText
до 25 символов, тогда это будет мое значение n .И это довольно быстро.Вот пример моего подхода:
int cursorPosition = mInputConnection.getTextBeforeCursor(MAX_CHARACTERS, 0).length();