Я скачал приложение и поиграл с ним, наблюдая за памятью через dumpsys.
Все выглядит нормально, память восстанавливается каждый раз.Я не могу воспроизвести ситуацию, но я вижу один всплеск, который, вероятно, связан.Всякий раз, когда вы перемещаетесь по карте или изменяете масштаб изображения (в основном, обновляя плитки) на спутнике, в памяти будет небольшой всплеск.Если вы сделаете это достаточно быстро, у вас не будет шанса на то, чтобы его восстановили, и он будет расти.
Теперь, мой телефон - Android 3.3.4 и имеет довольно хорошую конфигурацию, так что, возможно, GC намного эффективнее.Интересно, хотя, если бы мои старые тестовые телефоны восстанавливали память медленнее и, таким образом, когда я добирался до карты (скажем, после добавления рыб), у меня все еще была бы память от предыдущего действия, которое не было восстановлено GC.Затем, что бы я ни делал, я бы пошел в свое место и проверил все, увеличив / уменьшив масштаб.Это в сочетании с предыдущей памятью из предыдущих действий может довести телефоны до предела.
Это всего лишь теория, я в пути и не имею доступа ко всем моим тестовым телефонам.Вы знаете, какие версии телефонов, которые вылетали?Я вернусь через 3-4 дня и смогу попробовать приложение на своих старых телефонах.
ОБНОВЛЕНО: Я провел больше экспериментов с этим приложением.Я почти уверен, что добавление рыб непрерывно добавит больше воспоминаний.Я продолжал добавлять и удалять рыб и проверял, что память продолжает расти с помощью dumpsys meminfo.Реальные пользователи Pro Edition или даже облегченные пользователи, которые продолжают добавлять и удалять рыб, могут в конечном итоге приблизиться к пределу, и переход к карте впоследствии вызовет ошибку отсутствия памяти, поскольку в карту будет добавлен скачок памяти.Вот снимок после того, как я несколько раз добавил и удалил рыб
** MEMINFO in pid 11572 [com.hookedroid.fishingcompanion.lite] **
native dalvik other total limit bitmap nativeBmp
size: 19728 18251 N/A 37979 32768 N/A N/A
allocated: 17174 14674 N/A 31848 N/A 3144 0
free: 405 3577 N/A 3982 N/A N/A N/A
(Pss): 12750 1771 25944 40465 N/A N/A N/A
(shared dirty): 908 1544 5800 8252 N/A N/A N/A
(priv dirty): 12732 1008 24208 37948 N/A N/A N/A
Ваша личная память увеличится до 37 948, что, я уверен, если я продолжу добавлять и удалять рыб, это в конечном итоге вызовет исключение OutOfMemoryException
БОЛЬШЕ ОБНОВЛЕНИЯ (несколько минут спустя): Мне удается вывести приложение из строя, используя приведенную выше теорию.Я должен был добавить и удалить рыб несколько раз, прежде чем это произойдет.До сбоя приложения может быть более 50 рыб.
Я предполагаю, что SQL почему-то не был очищен должным образом.Глядя на dumpsys после каждого набора добавления и удаления 10 рыб (что является пределом облегченной версии), я вижу, что
SQL
heap: 6581 MEMORY_USED: 6581
PAGECACHE_OVERFLOW: 173 MALLOC_SIZE: 50
DATABASES
pgsz dbsz Lookaside(b) Dbname
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 33 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
1 16 62 FishingCompanion
Память SQL продолжает расти, даже если я уже удалил рыб.Если я продолжу делать это в течение некоторого времени, в конечном итоге он достигнет верхней границы телефона, и переход к карте (что вызывает скачок в памяти) вызовет исключение нехватки памяти, по-видимому, указывающее, что страница карты является причиной, тогда какЯ думаю, что страница добавления / удаления рыбы является частью реальной причины (я говорю «часть реальной причины», поскольку я не знаю, произойдет ли подобный эффект, скажем, если я добавлю новое местоположение).
Я правильно понял OutMemoryException, когда общий объем памяти составляет около 58 МБ (это, вероятно, отличается от телефона к телефону).Для справки вот похожее исключение OutOfMemoryException, которое я получил:
D/dalvikvm(11572): GC_FOR_MALLOC freed 125K, 11% free 25734K/28743K, external 4047K/4695K, paused 188ms
D/AndroidRuntime(11572): Shutting down VM
W/dalvikvm(11572): threadid=1: thread exiting with uncaught exception (group=0x4001d648)
E/AndroidRuntime(11572): FATAL EXCEPTION: main
E/AndroidRuntime(11572): java.lang.OutOfMemoryError: bitmap size exceeds VM budget(Heap Size=28743KB, Allocated=25734KB, Bitmap Size=4047KB)
E/AndroidRuntime(11572): at android.graphics.Bitmap.nativeCreate(Native Method)
E/AndroidRuntime(11572): at android.graphics.Bitmap.createBitmap(Bitmap.java:695)
E/AndroidRuntime(11572): at com.google.android.maps.ZoomHelper.createSnapshot(ZoomHelper.java:444)
E/AndroidRuntime(11572): at com.google.android.maps.ZoomHelper.beginZoom(ZoomHelper.java:194)
E/AndroidRuntime(11572): at com.google.android.maps.MapView$2.onScaleBegin(MapView.java:380)
E/AndroidRuntime(11572): at android.view.ScaleGestureDetector.onTouchEvent(ScaleGestureDetector.java:216)
E/AndroidRuntime(11572): at com.google.android.maps.MapView.onTouchEvent(MapView.java:682)
E/AndroidRuntime(11572): at android.view.View.dispatchTouchEvent(View.java:3932)
E/AndroidRuntime(11572): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:955)
E/AndroidRuntime(11572): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1015)
E/AndroidRuntime(11572): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1015)
E/AndroidRuntime(11572): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1015)
Надеюсь, это поможет