27
Апр
2021

Проблемы с 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

Подскажите, пожалуйста, что с этим делать

Источник: https://ru.stackoverflow.com/questions/1275442/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B-%D1%81-asynctask-%D0%BF%D1%80%D0%B8-%D0%BF%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D1%82%D0%B5-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0

Тебе может это понравится...

Добавить комментарий