#java #android #android-edittext #lag
#java #Android #android-edittext #задержка
Вопрос:
Я разрабатываю какое-то приложение для чата, все идет хорошо, но я застрял с одной проблемой. EditText отстает, моя клавиатура Android зависает на секунду или около того всякий раз, когда я набираю какую-либо букву в edittext. Я действительно не знаю, какой код предоставить, потому что это всего лишь простое поле EditText. Вот как я это делаю:
linforbutton.add(new LinearLayout(this)); //linear layout on the bottom os creen for edittext and button
RelativeLayout.LayoutParams params =
new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
linforbutton.get(x).setLayoutParams(params);
linforbutton.get(x).setBackgroundColor(0xff426193);
linforbutton.get(x).setOrientation(LinearLayout.HORIZONTAL);
int padding_in_dp1 = 3;
final float scale1 = getResources().getDisplayMetrics().density;
int padding_in_px1 = (int) (padding_in_dp1 * scale1 0.5f);
linforbutton.get(x).setPadding(0, 0, 0, 0);
relmsg.get(x).addView(linforbutton.get(x));
msginput.add(new EditText(this));
msginput.get(x).setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
msginput.get(x).setMaxLines(3);
msginput.get(x).setMinLines(1);
msginput.get(x).setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
msginput.get(x).setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
msginput.get(x).setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
msginput.get(x).setImeOptions(EditorInfo.IME_ACTION_SEND);
msginput.get(x).setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);
linforbutton.get(x).addView(msginput.get(x));
btninput.add(new Button(this));
btninput.get(x).setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
btninput.get(x).setText("Отпр.");
int padding_in_dp2 = 20;
final float scale2 = getResources().getDisplayMetrics().density;
int padding_in_px2 = (int) (padding_in_dp2 * scale2 0.5f);
btninput.get(x).setPadding(padding_in_px2, 0, padding_in_px2, 0);
linforbutton.get(x).addView(btninput.get(x));
Я создаю некоторые представления, поэтому у меня есть цикл for, не смотрите на массивы. Я попытался удалить массивы и создать только один вид, один edittext, одну кнопку, и это не сработало.
Комментарии:
1. У вас есть несколько потоков / или асинхронных задач?
2. Всего в моем приложении 6 потоков
3. Ну, тогда, вероятно, это ваша проблема. Посмотрите, можете ли вы добавить некоторые паузы в некоторые из ваших потоков для повышения производительности.
Ответ №1:
Таким образом, кажется, что ваши потоки могут конфликтовать друг с другом. Осмотрите свои прослушиватели событий, возможно, один из них поддерживает процесс. Некоторое время назад у меня была эта проблема с моими GPS-прослушивателями (onLocationChanged).
Я отправил данные на сервер из этого прослушивателя, и это просто убило приложение. После перемещения этого блока кода в новый поток это решило мою проблему.
Комментарии:
1. Да, кажется, в этом проблема. Мне нужно было получить доступ к моему потоку GUI из другого потока, чтобы что-то нарисовать, но в итоге я перенес весь мой слушатель в основной поток.