Использование WeakReference при вызове асинхронного кода - это своего рода хак, вам следует использовать компоненты архитектуры Android, выпущенные в прошлом году (2017), которые позволяют упростить подобные вещи.
Итак, у вас естьдействие, которое наблюдает за данными в модели представления:
public class MainActivity extends AppCompatActivity {
private TextView infoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
infoView = findViewById(R.id.infoView);
MainViewModel mainViewModel = ViewModelProviders.of(this).get(MainViewModel.class);
mainViewModel.infoText.observe(this, (text) -> {
infoView.setText(text);
});
}
}
И вы должны создать ViewModel, где этот тип соединения обрабатывается внутри LiveData, которая хранится в ViewModel:
public class MainViewModel extends ViewModel {
LiveData<String> infoText = new InfoTextLiveData();
public MainViewModel() {
}
}
Иваши LiveData должны знать, как извлечь данные:
public class InfoTextLiveData extends MutableLiveData<String> {
@Override
protected void onActive() {
new SshConnectTask().execute(); // optionally, you could `cancel()` the asyncTask in `onInactive()`
}
class SshConnectTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void...params){
/*STUFF*/
postValue("ASD");
return null;
}
}
}
Для этого вам нужно добавить зависимости AAC:
allprojects {
repositories {
jcenter()
google()
}
}
и
implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
Подробнее см. В руководстве:
https://developer.android.com/jetpack/docs/guide