Intereting Posts
Как использовать проект Java, который требует уровня соответствия 1.7 на пути создания проекта Android? Как отключить emoji от ввода в Android EditText? Каковы последствия VMDebug.startGC в файле traceview Android Unit Test: как очистить SharedPreferences Любой способ подавить предупреждения о «жестко закодированных строках» в файлах макетов? Невозможно запустить AVD в эмуляторе. Убедитесь, что Intel HAXM правильно установлен и доступен Является пешеходным переходом быстрее, чем кокон Android: I18n с параметрами Почему OnCreate следует вызывать только один раз в начале Activity? Как использовать методы setArguments () и getArguments () во Фрагментах? Android – Макет с эллипсисом с выравниванием по правому краю Перемещение плавающей кнопки действий вверх и вниз, чтобы избежать блокировки с помощью закусочной Почему элементы ListView не растут, чтобы обернуть их содержимое? Динамическое добавление ребенка в LinearLayout с получением позиции каждого ребенка Как воспроизводить несколько видео в режиме просмотра списка с помощью MediaPlayer?

После того, как приложение простаивало в течение нескольких часов, оно выходит из режима onResume, поскольку ресурсы отсутствуют. Как решить через onTrimMemory

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

Я считаю, что этот объект (и много других подобных объектов) будет сохранен для моего приложения, чтобы он оставался функциональным.

Я обнаружил, что, если я возобновляю приложение через несколько часов, он все еще функционирует. Но если я открою еще 10 приложений, оставьте их открытыми и возобновите приложение через несколько часов, он попытается прочитать с одного из этих объектов, но они теперь исчезли!

В этих случаях я считаю, что лучше всего убить приложение и перезапустить его, и попытался сделать это в onDestroy основного действия, но это получило обратную реакцию, потому что через 5 секунд после переключения на другое действие вызывается onDestroy предыдущего действия и приложение Убивается с помощью этого кода:

android.os.Process.killProcess(android.os.Process.myPid()); 

Поэтому я хочу только убить приложение, когда он простаивал часами, а ресурсы были аннулированы. Таким образом, когда пользователь попытается возобновить его, он умрет и начнет заново, тем самым снова загрузив все ресурсы в память.

Я искал метод onDestroy в классе Application, но не существует. Thre – метод onTrimMemory.

ВОПРОС:

Как использовать обратный вызов Application.onTrimMemory () для уничтожения ресурсов моего приложения, которые ему нужны, были уничтожены?

EDIT: На самом деле, читая документацию onTrimMemory, Im оставил впечатление, что его я должен освободить память, уничтожив объекты, и если я этого не сделаю, то как после возобновления приложения эти объекты теперь нулевые? Я не понимаю.

EDIT2:

Мне удалось частично решить мою проблему:

Я загрузил приложение «Fill Ram» из Google, предназначенное для разработчиков, которые хотят видеть, как их приложение ведет себя в ситуациях с низкой памятью

Я постепенно начал заполнять баран и видел, как вызывались методы onTrimMemory со значениями или соответственно 20, 40, 60 и 80

После каждого раза, когда я видел, что его вызывали в журналах, я быстро возобновил свое приложение, а затем около 60 или 80, ресурсы, которые мне нужны, были нулевыми

Я вставил проверку нулевого указателя в onResume, и если эти ресурсы были пустыми, я сделал следующее:

 if (application.data == null || application.data.size() == 0) { // Restart app so data is reloaded Log.e("kill app", "kill app"); Intent mStartActivity = new Intent(this,MainActivity.class); int mPendingIntentId = 123456; PendingIntent mPendingIntent = PendingIntent.getActivity(this, mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent); System.exit(0); } 

Как указано здесь:

Как программно «перезапустить» приложение для Android?

Проблема остается полурешенной, потому что, по-моему, в каком-то другом месте моего приложения может отсутствовать какой-то другой ресурс, поэтому я рассматриваю возможность делать это в onTrimMemory 60 или 80?

Мне нужна дополнительная помощь в понимании этого.

Кроме того, следует использовать

 System.exit(0); 

или

 android.os.Process.killProcess(android.os.Process.myPid()); 

Я сделал что-то еще:

В моей базовой деятельности все остальные действия расширяются, я добавил следующее:

 @Override public void onTrimMemory(int level) { super.onTrimMemory(level); if (level > TRIM_MEMORY_MODERATE) { // Restart app so data is reloaded android.os.Process.killProcess(android.os.Process.myPid()); } } 

Solutions Collecting From Web of "После того, как приложение простаивало в течение нескольких часов, оно выходит из режима onResume, поскольку ресурсы отсутствуют. Как решить через onTrimMemory"