after adding adMob ads to my application, I have noticed some strange memory behaviour. On my android phone, If I go Settings>Applications>Manage applications>myApp
I obtain the storage information for my app.
What concerned me was that the Data storage was around 600kb, and the Cache was over 2.5MB (as opposed to 28kb and 0kb maximum without admob).
After some trial and error, I discovered that the Data storage value seems to increase with the cache. If I clear the cache and restart my app, the data value drops significantly, back to what I would expect for my program.
I have no idea what this cache is doing, but it is related to adMob. I have not integrated any specific cache management in my program. I worry that if this cache content grows as it has been, then the users of my app will not be impressed if my App starts taking up 10+MB of space. Should I be worried? Could it be that because I did nothing than run my app repeatedly for a day that no other app or program will have outed my data from the cache? Should I manually clear the cache? what is it's purpose with regards to Admob?
Admob is just caching its ads so they load quicker. The Android OS will clear the /cache directory if the filesystem gets too full, and Admob should be managing its own cache size. You shouldn't have to worry about it
when use the admob,it save some file(cookies,index etc) under Android/yourfile/app_webview. if you dont want increase your data usage, you can delete the file before exit your app.
Related
My app are sometime needed syncing with web servers and pull the data in mobile sqlite database for offline usages, so database size is keep growing exponentially.
I want to know how the professional app like whatsapp,hike,evernote etc manage their offline sqlite database.
Please suggest me the steps to solve this problem.
PS: I am asking about offline database (i.e growing in the size after syncing) management do not confuse with database syncing with web servers.
I do not know how large is your data size is. However, I think it should not be a problem storing reasonably large data into the internal memory of an application. The internal memory is shared among all applications and hence it can grow until the storage getting filled.
In my opinion, the main problem here is the query time if you do not have the proper indexing to your database tables. Otherwise, keeping the databases in your internal storage is completely fine and I think you do not have to be worried about the amount of data which can be stored in the internal storage of an application as the newer Android devices provide better storage capability.
Hence, if your database is really big, which does not fit into the internal memory, you might consider having the data only which is being used frequently and delete otherwise. This highly depends on the use case of your application.
In one of the applications that I developed, I stored some large databases in the external memory and copied them into the internal memory whenever it was necessary. Copying the database from external storage into internal storage took some time (few seconds) though. However, once the database got copied I could run queries efficiently.
Let me know if you need any help or clarification for some points. I hope that helps you.
For max size databases. AFAIK You don't want to loose what's on the device and force a reload.
Ensure you don't drop the database with each new release of your app when a simple alter table add column will work.
What you do archive and remove from the device give the user a way to load it in the background.
There might be some Apps / databases where you can find a documentation, but probably this case is limited and an exception.
So to know exactly what's going on you need to create some snapshots of the databases. You can start with that of one app only, or do it directly with several, but without analyzing you won't get a reliable statement.
The reasons might be even different for each app as databases and app-features differ naturally too.
Faster growth in size than amount of incoming content might be related to cache-tables or indexing for searches, but perhaps there exist other reasons too. Without verification and some important basic-info about it, it's impossible to tell you a detailed reason.
It's possible that table-names of a database give already some hints, but if tablenames or even fields just use meaningless strings, then you've to analyze the data inside including the changes between snapshots.
The following link will help in understanding what exactly Whatsapp is using,
https://www.quora.com/How-is-the-Whatsapp-database-structured
Not really sure if you have to keep all the data all the time stored on the device, but if you have a choice you can always use cloud services (like FCM, AWS) to store or backup most of the data. If you need to keep all the data on the device, then perhaps one way is to use Caching mechanisms in your app.
For Example - Using LRU (Least Recently Used) to cache/store the data that you need on the device, while storing the rest on the cloud, and deleting whats unneeded from the device. If needed you can always retrieve the data on demand (i.e. if the user tries to pull to refresh or on a different action) and delete it whenever its not being used.
I have this aplication thats keeps building cache every time I open the app
In my app I load like 20 images from my website, but I don't save them to cache,
does the app automatically save this images to cache? If so, I don't think they load from cache, cuz I still have to have internet to load them
Admob in the other hand, if I don't have internet and I loaded the test ad before, it will load the testad.
currently I have the app to delete the cache everytime it starts, keeping cache low, but this doesn't seems smart.
My questions are:
Does admob uses cache of my app?
Knowing my app loads 20 images from my website, this images being
loaded affects my cache size even if I don't save them
programmatically to cache ?
is deleting cache expensive enough to have a dedicated thread to
do just that?
Does admob uses cache of my app?
Yes i think Admob caches its ads so they load faster. And Admob should be managing its own cache size. I don't think you need to worry about that.
Knowing my app loads 20 images from my website, this images being loaded affects my cache size even if I don't save them
programmatically to cache ?
No images or bitmaps will not be cached unless you do so, see this link for more info. I will recommend that you use the Glide or Picasso for image loading since they are memory efficient and abstract out most of the complexity.
Is deleting cache expensive enough to have a dedicated thread to do just that?
I don't think you should use dedicated thread. What you can do is override onTrimMemory and keep monitoring the memory level.When your memory level is critical or low you can delete the cache. Check this link for more info. In my opinion if you use Glide for loading your images it will already handle the memory very well and prevents OutOfMemoryError. Also, loads image much faster.
I have integrated AdMob in my Android app. I noticed the app taking up more and more storage space in a folder called app_webview generated by AdMob inside the app data folder. Should I clear the contents of this folder on each app exit ?
Should I clear the contents of this folder on each app exit ?
Why would you want to do that? Admob does this to provide better and speedy ad serving. And I'm sure the amount it is caching is within tolerable limits. Clearing that much space on the user's storage will not make him much happy. But you'll lose on revenue because of Admob trying to re-download all the stuff again. It will lower your fill rate and thereby your revenue.
There is no harm in doing it but you'll lose more (revenue) than you gain (user satisfaction). The user might not even notice it.
Admob is just caching its ads so they load quicker. The Android OS will clear the /cache directory if the filesystem gets too full, and Admob should be managing its own cache size. You shouldn't have to worry about it.
Could anyone please tell me what is android cache and apps cache because when we talk about cache clean apps then what it do, is cache clean concept is cleaning apps cache or else like memory management Primary storage,RAM,Cache are different and as i know cache size small because it is very costly. so i want to be clear that what exactly the concept of cache in android OS.
The cache is basically a temporary storage area for an application while it's running -- it can store things like temporary images downloaded from the internet. Clearing it shouldn't really have much of an effect from a user perspective. Clearing the data, however, will remove any user data, databases, etc -- this includes things like account settings, persistent preferences, etc. Clearing the data should revert the application back to it's state as it was when you first installed it.
As an example, assume we have a Twitter application. Clearing the cache might delete any profile images for people you're following, so when you look at your timeline again, they'll have to be retrieved from the internet again. Clearing the data would remove any information at all, including your login information, who you're following, whether or not you want to be notified of new tweets, and things like that.
I am building the application that will load list of news from the website. Each news/headline has an image. I want to save/cash the images so user does not has to download them again.
Q: In your opinion, what would be a better/more sufficient way: Loading images and saving them on the device or use the CacheManager? At the moment I am using the first solution and everything works fine. However, the website has many categories and even more news per category therefore there are lot of images saved on the device. Is it normal in this type of applications to save the images on the device?
Thanks for your help,
marqs
I don't think you should save the images on the device, because of many reasons:
Why wasting the device space on news images? All the user wants is to read the news and thats it. (In your case maybe open it later, but still - not forever)
You can save it on the device and make the app. delete those files after lets say 24 hours..
The main issue is the privacy issue, when the user is deleting the cache files he thinks all the webs he visited has wiped from the device, but in this case they aren't..
Maybe you can just add a "Clean Cache" button in the app. but after all I wrote I think using the Cache-manager is the best way - just because it was meant for those things exactly..
:)
Rotem
I didn't find a reason to use CacheManager. I used getCacheDir and stored everything on file. I have two levels of cache. First when I fetch it, I store in memory and disk. When in memory gets bigger than 30 objects, I started clearing the memory to make some room for the new images coming. However, I still keep the images around on disk and bring in to memory as needed. I found this to give me the smoothest scrolling. After about an hour, I start expiring the image on disk too.