Просмотр обновлений Asynctask, даже когда мое приложение работает в фоновом режиме (нажата кнопка «Домой») - PullRequest
0 голосов
/ 04 марта 2019

Я запускаю AsyncTask в MainActivity и заставляю его спать 10 секунд в методе doInBackground().В промежутке (до истечения 10 секунд) я нажимаю кнопку «Домой», а также обновляю текст в TextView в методе AsyncTask onPostExecute().Мой AsyncTask может успешно обновлять представление, даже если мое приложение работает в фоновом режиме.

Я не уверен, как это возможно, кстати, если я нажму кнопку «Назад», то я вижу метод onDestroy() вызываемой операции, но все же нет исключения, когда onPostExecute() метод пытается обновить TextView.

public class MainActivity extends AppCompatActivity {

    private TextView finalTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        finalTextView = (TextView) findViewById(R.id.finalTextView);

        AsyncTaskRunner task = new AsyncTaskRunner();
        task.execute("10", "11", "12");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("onDestroy", "ActivityDestroyed");
    }

    private class AsyncTaskRunner extends AsyncTask<String, String, String> {

        private String resp;

        @Override
        protected String doInBackground(String... params) {
            publishProgress("Sleeping..."); // Calls onProgressUpdate()
            try {
                int time = Integer.parseInt(params[0]) * 1000;

                Thread.sleep(time);
                resp = "Slept for " + params[0] + " seconds";
            } catch (InterruptedException e) {
                e.printStackTrace();
                resp = e.getMessage();
            } catch (Exception e) {
                e.printStackTrace();
                resp = e.getMessage();
            }
            return resp;
        }


        @Override
        protected void onPostExecute(String result) {
            // execution of result of Long time consuming operation
            finalTextView.setText(result);
            Log.e("onPostExecute", "" + result);
        }

    }
}

1 Ответ

0 голосов
/ 04 марта 2019

Прежде чем делать какие-либо выводы, вы должны знать, как работает асинхронная задача

Пройдите этот ответ, который может решить половину вашей проблемы

Еще одна вещь, например, асинхронная задача, работает в потоке пользовательского интерфейсаapplication what-is-and-and-uithread-ui-thread AsyncTask не остановится, даже если действие уничтожено

Перейдите к справочным документам AsyncTask.чтобы понять, как потоки взаимодействуют и какие методы выполняются в каком потоке.

AsyncTask |Разработчики Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...