我试图编写AsyncTask代码,但AndroidStudio会警告我:
this Aynctask class should be static or leaks might occur
我在堆栈3中找到了解决方案:click:
asyncTasc static
weakReference
asyncListener
这个主题已经过时了,所以我肯定会问:这些解决方案仍然是按时完成的。 ?
哪些解决方案是专业的并用于实际项目?
我的代码:
@Override
public void onClick(View view) {
String loginFromUser = etLogin.getText().toString();
String passwordFromUser = etPassword.getText().toString();
GetUsers getUsers = new GetUsers();
getUsers.execute(loginFromUser, passwordFromUser);
}
private class GetUsers extends AsyncTask<String, Void, Void>{
@Override
protected Void doInBackground(String... strings) {
String login = strings[0];
String password = strings[1];
Log.w("Credentials: ", "" + login + password);
return null;
}
}
答案 0 :(得分:0)
任何不保持非静态内部类所包含的隐式引用的解决方案都是完全可以接受的。在您提供的示例中,您只需更改
即可private class GetUsers extends AsyncTask<String, Void, Void>{
到
private static class GetUsers extends AsyncTask<String, Void, Void>{
如果在某些时候你需要引用外部类的成员,那么为外部实例创建一个WeakReference
作为内部类的成员,如下所示:
private static class GetUsers extends AsyncTask<String, Void, Void> {
private final WeakReference<OuterClass> outer;
GetUsers(OuterClass outer) {
this.outer = new WeakReference<>(outer);
}
@Override
protected Void doInBackground(String... strings) {
OuterClass outer = this.outer.get();
// Return early if the outer reference is null
if (outer == null) {
return null;
}
// Your logic...
return null;
}
}