SyncAdapter о предупреждении статического поля - PullRequest
0 голосов
/ 16 мая 2018

У меня есть этот код для моего SyncService:

public class SyncService extends Service {

    private static SyncAdapter syncAdapter = null;
    private static final Object syncAdapterLock = new Object();

    @Override
    public void onCreate() {
        synchronized (syncAdapterLock) {
            if (syncAdapter == null) {
                syncAdapter = new SyncAdapter(getApplicationContext(), true);
            }
        }
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return syncAdapter.getSyncAdapterBinder();
    }
}

Этот код, который я сделал на странице разработчиков Android здесь: https://developer.android.com/training/sync-adapters/creating-sync-adapter#CreateSyncAdapterService

Проблема в том, что static на SyncAdapter жалуется:

Не размещайте классы контекста Android в статических полях (статические ссылка на SyncAdapter с полем context, указывающим на 'Контекст'); это утечка памяти (которая также нарушает Instant Run)

Но это так на странице разработчиков Android. Так это правильно или неправильно? Если это неправильно, что будет правильным путем? Я не смог найти никакой информации об этом конкретном пункте ...

1 Ответ

0 голосов
/ 16 мая 2018

Дело в том, что Service расширяется Context. Не следует ссылаться на контекст в статическом поле, которое может быть причиной утечки памяти (поскольку даже когда сборщик мусора уничтожит объект, статическая ссылка все равно будет доступна и будет по-прежнему содержать объект контекста, который не будет уничтожен). Я думаю, что решение здесь, чтобы удалить static модификатор. Который, вероятно, был добавлен по ошибке.

...