Java Arrays.fill () функция преждевременно выполняется в основном потоке? - PullRequest
0 голосов
/ 22 мая 2018

Этот код находится под кнопкой OnClickListner

String username = edtLabel.getText().toString():
char[] password = new char[edtPassword.getText().length()];
edtPassword.getText().getChars(0, edtPassword.getText().length(), password,0);

new BackGroundTask(username, password).execute();
Arrays.fill(password, '0');

Проблема, с которой я здесь сталкиваюсь, заключается в том, что пароль, передаваемый конструктору BackGroundTask (класс AsyncTask), всегда представляет собой массив нулей, равный {0,0, 0}.Хотя после настройки конструктора я вызываю функцию Arrays.fill ().

Код немного длиннее данного фрагмента, проверяет несколько других вещей, но не меняет пароль в любой момент времени.

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

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {

        Arrays.fill(password, '0');
    }
 }, 100);

Любая лучшая и прямолинейная техника была бы великолепна, спасибо.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Можно попробовать

new BackGroundTask(username, password)
{
     @Override
     protected void onPostExecute(String result) {
           super.onPostExecute(result);
           Arrays.fill(password, '0');
     }

}.execute();
0 голосов
/ 22 мая 2018

Если конструктор BackGroundTask не должен изменять исходный массив password, вы можете передать копию этого массива, используя Arrays.copyOf().

char[] pwCopy = Arrays.copyOf(password,password.length);
new BackGroundTask(username, pwCopy).execute();
Arrays.fill(password, '0');

РЕДАКТИРОВАТЬ: если целью являетсяудалив пароль из памяти после того, как вы его закончили, я бы переместил вызов Arrays.fill(password, '0'); в конец метода (или конструктора) класса BackGroundTask, который использует массив password.В этом случае вам не нужно создавать копию массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...