gpt4 book ai didi

Java Arrays.fill() 函数在主线程上过早执行?

转载 作者:行者123 更新时间:2023-12-02 11:13:10 26 4
gpt4 key购买 nike

此代码位于按钮的 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);

任何更好、更直接的技术都会很棒,谢谢。

最佳答案

如果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 的类大批。在这种情况下,您不必创建数组的副本。

关于Java Arrays.fill() 函数在主线程上过早执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50466008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com