У меня очень странная проблема, и ее трудно описать, поэтому, пожалуйста, внимательно прочитайте допущения перед ответом, чтобы избежать прыжков в то, что, как я уже знаю, не
1 - у меня есть приложение для Android, которое входит в систему с моего сервера
2 - после успешного входа в систему я создаю Singleton API , который будет использоваться всеми действиями для отправки запросов на сервер
3 - невозможно использовать приложение без логина
4 - во время входа в систему у меня очень чистое состояние
if(APIFacade.getInstance() != null){
startActivity(new Intent(this,MainActivity.class));
finish();
}else {/*error handling*/}
5 - во всем классе LoginActivity
есть только один вызов метода startActivity
, поэтому невозможно запустить MainActivity
без проверки, является ли фасад нулевым
6 - невозможно установить APIFacade.INSTANCE
на null
после его создания
Но даже при всех этих условиях пользователи иногда получают NullPointerException
на MainActivity
, когда приложение пытается сделать первый вызов API после входа в систему
String url = APIFacade.getInstance().getProfilePicUrl(); //throws nullpointerexception on 5% of the times
Класс APIFacade выглядит так:
public class APIFacade {
private static APIFacade INSTANCE = null;
@WorkerThread
public APIFacade(Object i, final boolean preLoad) {
INSTANCE = this;
//other stuff
}
public static APIFacade getInstance() {
return INSTANCE;
}
}
Я не могу воспроизвести проблему в среде разработки, поэтому я просто знаю, что это происходит из-за панели мониторинга сбоев на firebase ...
Я полагаю, что в моем коде нет утечек, которые могут привести к этой ситуации, поэтому единственная теория, которую я получил: Android очищает некоторые переменные из памяти, когда мое приложение становится фоновым ...
Я знаю, что Android, естественно, делает это для занятий, но для одиночек?
и если да, что я могу сделать, чтобы решить это?