Почему мой синглтон синхронизирован, но создается много раз? - PullRequest
0 голосов
/ 02 июля 2018

По какой-то причине мой одноэлементный репозиторий много раз создавался из фоновых потоков, хотя синхронизированная должна была помочь. Может ли кто-нибудь помочь? При необходимости я предоставлю фрагменты кода и ссылку на github.

Мой класс IntentService:

  @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        Log.d(MainActivity.TAG, "ArticleIntentService - onHandleIntent");


        LiveData<List<Article>> liveArticles = ArticleRepository.getInstance(getApplication())
                .loadFromNetwork(PAGE_NUMBER, PAGE_SIZE);
        PAGE_NUMBER++;
        liveArticles.observeForever(articles -> {
            Log.d(MainActivity.TAG, "onStartJob - onChanged!!!!!!");
//                liveArticles.removeObserver(this);
            NotificationUtils.showNotification(context, articles.get(0).getSectionName(), articles.get(0).getWebTitle());

        });

    }

Мой репозиторий:

public static ArticleRepository INSTANCE;

public static synchronized ArticleRepository getInstance(Application application){
    if(INSTANCE == null){
        Log.d(TAG, "ArticleRepository getInstance is NULL");
        return  new ArticleRepository(application);
    }

    return INSTANCE;
}

private ArticleRepository(Application application) {
    Log.d(TAG, "ArticleRepository constructor");
    mContext = application;
    mArticles = new MutableLiveData<>();
    ArticleRoomDatabase db = ArticleRoomDatabase.getInstance(application);
    mArticleDao = db.articleDao();
}

1 Ответ

0 голосов
/ 02 июля 2018

Вы никогда не назначаете INSTANCE:

public static synchronized ArticleRepository getInstance(Application application){
    if(INSTANCE == null){
        Log.d(TAG, "ArticleRepository getInstance is NULL");
        INSTANCE = new ArticleRepository(application);
    }

    return INSTANCE;
}
...