diff --git a/map/framework.cpp b/map/framework.cpp index 849f528c35..53d126b3d0 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -866,12 +866,15 @@ void Framework::DisablePlacemark() m_drawPlacemark = false; } +void Framework::ClearAllCaches() +{ + m_model.ClearCaches(); + GetSearchEngine()->ClearAllCaches(); +} + void Framework::MemoryWarning() { - // clearing caches on memory warning. - m_model.ClearCaches(); - - GetSearchEngine()->ClearCaches(); + ClearAllCaches(); LOG(LINFO, ("MemoryWarning")); } @@ -882,8 +885,11 @@ void Framework::MemoryWarning() void Framework::EnterBackground() { - // clearing caches on entering background. - m_model.ClearCaches(); + // Do not clear caches for Android. This function is called when main activity is paused, + // but at the same time search activity (for example) is enabled. +#ifndef OMIM_OS_ANDROID + ClearAllCaches(); +#endif double val = 0; (void)Settings::Get(FOREGROUND_TIME_SETTINGS, val); diff --git a/map/framework.hpp b/map/framework.hpp index 5cd580c2cf..86a77234b3 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -143,6 +143,8 @@ protected: BenchmarkEngine * m_benchmarkEngine; + void ClearAllCaches(); + public: Framework(); virtual ~Framework(); diff --git a/search/search_engine.cpp b/search/search_engine.cpp index 33ebc572bb..50465cb20f 100644 --- a/search/search_engine.cpp +++ b/search/search_engine.cpp @@ -346,10 +346,12 @@ void Engine::ClearViewportsCache() m_pQuery->ClearCaches(); } -void Engine::ClearCaches() +void Engine::ClearAllCaches() { - /// @todo Add m_pData->m_infoGetter clearing routine. - /// Now we have prereserved cache size. + threads::MutexGuard guard(m_searchMutex); + + m_pQuery->ClearCaches(); + m_pData->m_infoGetter.ClearCaches(); } } // namespace search diff --git a/search/search_engine.hpp b/search/search_engine.hpp index 380aee2965..fc7feff073 100644 --- a/search/search_engine.hpp +++ b/search/search_engine.hpp @@ -56,7 +56,7 @@ public: m2::RectD GetCountryBounds(string const & file) const; void ClearViewportsCache(); - void ClearCaches(); + void ClearAllCaches(); private: static const int RESULTS_COUNT = 15;