2016-01-28 2 views
1

Кто-нибудь знает, почему мой метод onDestroy для сохранения bool внутри моей общей pref отлично работает на vd, но не всегда работает на реальном устройстве? похоже, что я работаю, когда я ухожу из приложения и возвращаюсь дальше к главному экрану, но не при выходе из приложения, остаюсь в окне списка приложений и снова открываю приложение .. weird есть какая-то ошибка, о которой я не знаю или может зависеть от моих других классов? если это так я могу разместить код, но это очень просто, как сказал BOOL сохранить и получитьandroid onDestroy работает отлично только на vd

редактирования: если вы, ребята пытаются создать Scrollview в фрагменте (осколочной из MainActivity), и попытаться перейдите в режим редактирования и нажмите кнопку «Назад», чтобы выйти из приложения, немного побеседовать с ним, и вы увидите, что onDestroy и даже onStop не будут вызваны.

Q. Итак, как я должен сохранить свою префикс перед тем, как закончить приложение? надежным все время? также для этого мне понадобится альтернатива onDestroy, даже не onStop, потому что мне нужно сохранить pref только до того, как приложение перестанет меняться, и поскольку onDestroy не является надежным (из того, что говорит Android Dev guide), что я должен использовать? благодаря

Обход: я поместил это в onCreateView()

boolPref = getActivity().getSharedPreferences("pref_bool", Context.MODE_PRIVATE); 
firstVisit = boolPref.getBoolean("bool", DEFAULT); 

if (firstVisit == false) { 
    scrollView.setVisibility(View.VISIBLE); 
}else{ 
    scrollView.setVisibility(View.INVISIBLE); 
} 

if (savedInstanceState == null) { 
    scrollView.setVisibility(View.INVISIBLE); 
} 

где firstVisit является boolean firstVisit; объявлена ​​при запуске. (этот логический трюк был частью решения с другого поста, но он не работал хорошо внутри onDestroy() или onStop(), потому что иногда они не вызываются)

затем я добавил это внутри своей кнопки OnClick:

 boolPref = getActivity().getSharedPreferences("pref_bool", Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor_bool = boolPref.edit(); 
     editor_bool.putBoolean("bool", false); 
     editor_bool.apply(); 

     scrollView.setVisibility(View.VISIBLE); 

и она работает, что это в основном делает: установить мой Scrollview быть скрыты каждый мой начинается приложение (через savedInstanceState, как @bwt предлагаемых ниже), и остается скрытым, когда я перейти на другой вид деятельности и прийти назад (с помощью bool = true), если я не нажму кнопку внутри первой активности (настройка и сохранение bool = false), поэтому с этого момента прокрутка просматривается всегда, даже если я перехожу к другому действию и возвращаюсь

+0

Нет ограничений с SharedPreferences xml. Вы добавляете в свой редактор apply() или commit()? Дайте нам некоторый код, чтобы видеть. – Stanojkovic

+0

Да или он не будет работать на vd – m4tt

+1

Разместите свой код здесь. – Stanojkovic

ответ

1

Я думаю, что подходящий момент для сохранения предпочтения - это когда он изменяется, а не когда приложение завершает работу. Специально, поскольку Android может просто просто убить процесс (и включенное приложение) без вызова обратного вызова. Используйте apply() вместо commit(), чтобы приложение не приходилось ждать.

Альтернативно вы можете переопределить onSaveInstanceState(). Он не является частью базового жизненного цикла, но дает вам возможность сохранить текущее состояние вашего Activity перед его уничтожением.

+0

, так что если я хочу, чтобы мой scrollview был скрыт каждый раз, когда мое приложение запускается, и остается скрытым, когда я перехожу к другому действию и возвращаюсь, если только я не нажимаю кнопку внутри первой активности, поэтому с этого момента прокрутка просматривается всегда, даже если я перехожу к другому активность и вернуться, как я должен использовать onSaveInstanceState() или boolean внутри общей pref? – m4tt

+0

Я бы 1) в первом действии сохранил текущее состояние прокрутки в пакете, предоставленном 'onSaveInstanceState()', 2), когда пользователь возвращается к этой активности, либо действие было уничтожено, но и восстановлено, и вы можете восстановить состояние scrollview в пакете, предоставленное 'onCreate()' (которое в этом случае не является нулевым), или действие не было уничтожено, и вам не нужно восстанавливать состояние – bwt

+0

, разрешенное с помощью вашего предложения savedInstanceState и bools у меня уже было. Спасибо за вашу помощь! (отредактированный с помощью решения) – m4tt

Смежные вопросы