Почему внутренний AsyncTask должен быть статическим, а Thread - нет? - PullRequest
0 голосов
/ 21 октября 2018

В следующем примере, если я объявлю, что AsyncTask android studio выдаст предупреждение, чтобы я определил его как статический.В соответствии с этим замечательным объяснением мы определяем его как статический класс, чтобы позволить виртуальной машине собирать службу в мусоре.

Но кажется, что поток не должен быть статичным.Это почему?Это просто Android Studio, которая не выдает предупреждение или поток ведет себя совершенно по-другому?

public class MyTrackingService extends Service {

    class TrackingThread extends Thread {
        private final Context cotext;

        TrackingThread(Context context){
            this.cotext = context;
        }
        @Override
        public void run() {
            super.run();
        }
    }

    class TrackingTask extends AsyncTask<Void, Void, Void> {
        private final Context context;

        TrackingTask(Context context){
            this.context = context;
        }
        @Override
        protected Void doInBackground(Void... voids) {
            return null;
        }
    }
}

1 Ответ

0 голосов
/ 21 октября 2018

В следующем примере, если я объявляю, что AsyncTask android studio выдает предупреждение, чтобы я определил его как статический

Предупреждение Lint является чрезмерно агрессивным.Потребность в том, чтобы он был static, в основном приходит с действиями и фрагментами.

Конечно, иметь AsyncTask в Service, как вы делаете здесь, бессмысленно.Вы почти никогда не хотите что-либо делать в главном потоке приложений в Service, и смысл AsyncTask состоит в том, чтобы что-то делать в главном потоке приложений после завершения задачи.Наличие AsyncTask без onPostUpdate() является запахом кода и указывает на то, что вам следует использовать что-то еще, например обычный поток.

Также обратите внимание, что хотя AsyncTask официально не считается устаревшим, его использованиебыл осужден в течение последних нескольких лет.

Но похоже, что поток не должен быть статичным

Он страдает от тех же проблем, что и AsyncTask,Для него просто нет предупреждения Lint.

Это просто андроид студия, которая не выдает предупреждение

Исправить.

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