В моем приложении у меня есть профиль пользователя пользователя. Если он ранее вошел в систему, я загружаю его с моего сервера, иначе он берет фото с камеры или галереи. В любом случае, я храню его в классе под названием DataStorage в статической переменной общественного Bitmap таким образом:Статический битмап, установленный в null, не остается равным нулю
public class DataStorage {
.
.
public static Bitmap origProfilePic; //not saved on app close
.
.
Теперь, если пользователь решит вновь сделать свой профиль, я регистрирую его из отправить его обратно к созданию профиля экран, и я призываю:
DataStorage.origProfilePic = null;
(Кстати, нуль является законным значением для этой картины - мы позволяем пользователям не иметь картины). Создание профиля осуществляется через 2 действия - сначала выберите имя пользователя и пароль, затем выберите изображение и другие данные. Странно то, что, хотя я установил переменную изображения в нуль, каким-то образом, когда я дойду до конца создания профиля, он вернулся к первоначальному значению, и у меня как-то есть пользователь со старым изображением профиля (это в случай, когда он не выбирал новую картину)
Я вошел его п OnCreate функции двух видов деятельности:
onCreate SignUpActivity1, origPic = null
затем
onCreate SignUpActivity2, origPic = [email protected]
Но SignupActivity1 называет намерение на SignUpActivity2 и нигде в SiugnupActivity1 нет ссылку на DataStorage.origProfilePic, за исключением моих операторов журнала.
я решил проверить еще раз в SignUpActivity1 при изменении значения, и я нашел ... так же, как я призываю SignupActivity2:
Intent intent = new Intent(SignUpActivity1.this, SignUpActivity2.class);
intent.putExtra("EMAIL", email.toString());
intent.putExtra("PASSWORD", password.toString());
startActivity(intent);
Log.e("Kibi", "End SignUpActivity1, origPic = " + DataStorage.origProfilePic);
finish();
Это как-то:
End SignUpActivity1, origPic = [email protected]
Это довольно повторяется в этом конкретном случае, хотя я, конечно, устанавливаю битмап в нуль в других местах и не вижу, чтобы он всплывал.
Я видел несколько вещей о SO о статических растровых изображениях, представляющих опасность для утечек памяти, хотя я не вижу утечки памяти прямо сейчас, я беспокоюсь, что я должен делать что-то очень плохое, если нельзя установить значение null на.
Может ли кто-нибудь объяснить, что я делаю неправильно, и что лучший способ сохранить этот растровый образ в основном изменчивым способом?
Ah - Я думаю, что последний бит об утилизации может быть тем, что я ищу - собираюсь проверить, что сейчас и примет, если это поможет – Kibi
Ahh, нет - не работает, извините, не уверен, что происходит. Я всегда использую DataStorage.origProfilePic напрямую - не назначая другой битмап, чтобы он был равен ему ... теперь, когда II null, я пытаюсь сначала переработать, но, похоже, не помогает – Kibi
Тем не менее, если вы измените статическое значение в ' Значение SignUpActivity2' в переменной SignUpActivity1 изменяется, поскольку они используют одну и ту же ссылку. Не рекомендуется создавать статическую переменную, когда вы используете ее для разных целей/значений. Правда, вы правильно меняете значение 'DataStorage.origProfilePic' в' SignUpActivity2'? –