Проблемы с AsyncTask при повороте экрана
Есть код, который должен привязывать старый AsyncTask к новому activity, при повороте экрана:
public class MainActivity extends AppCompatActivity {
MyTask mt;
TextView tv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("qwe", "create MainActivity: " + this.hashCode());
tv = (TextView) findViewById(R.id.tv);
mt = (MyTask) getLastNonConfigurationInstance();
if (mt == null) {
mt = new MyTask();
mt.execute();
}
// передаем в MyTask ссылку на текущее MainActivity
mt.link(this);
Log.d("qwe", "create MyTask: " + mt.hashCode());
}
public Object onRetainNonConfigurationInstance() {
// удаляем из MyTask ссылку на старое MainActivity
mt.unLink();
return mt;
}
static class MyTask extends AsyncTask<String, Integer, Void> {
MainActivity activity;
// получаем ссылку на MainActivity
void link(MainActivity act) {
activity = act;
}
// обнуляем ссылку
void unLink() {
activity = null;
}
@Override
protected Void doInBackground(String... params) {
try {
for (int i = 1; i <= 10; i++) {
TimeUnit.SECONDS.sleep(1);
publishProgress(i);
Log.d("qwe", "i = " + i + ", MyTask: " + this.hashCode()
+ ", MainActivity: " + activity.hashCode());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
activity.tv.setText("i = " + values[0]);
}
}
}
Проблема в том, что public Object onRetainNonConfigurationInstance() подчёркивается красным
При запуске возникает ошибка:
D:\User\GitHub\AsyncTaskLesson_6\app\src\main\java\com\semenov\asynctasklesson_6\MainActivity.java:35: error: onRetainNonConfigurationInstance() in MainActivity cannot override onRetainNonConfigurationInstance() in ComponentActivity
public Object onRetainNonConfigurationInstance() {
^
overridden method is final
Подскажите, пожалуйста, что с этим делать
Ответы (1 шт):
Автор решения: Shams
→ Ссылка
Вместо onRetainNonConfigurationInstance() используйте onRetainCustomNonConfigurationInstance(), a для получения объекта getLastCustomNonConfigurationInstance().
Хотя эти методы уже устарели. Лучше всего использовать Viewmodel.