*RANT* bad Android memory management

VitasLoWang

Member
Feb 13, 2010
43
2
0
Guys I have problem with Android smartphones. I am not the youngest anymore and remember the first PCs and first smartphones with 32x less memory then an average handheld device has today. I played with them all and know what they could do. The thing that still continues to surprise me till today on Android is WHY the heck can't an app stay in memory without being quit on the first occasion?? I really think that Android will never be usable for any serious work if things keep closing or reloading just after a few switches between apps!
Some examples: why can't I switch between Chrome browser and Onenote to type something without having that webpage be reloaded again using more data and sucking more battery power? I learned not to risk writing any bigger post into some forum lately because if I would have to switch to another tab to check some info or switch to another app the in progress text would most likely be lost because webpage would reload! Why is it so risky to switch out of some game to write a message or check calendar because it is very likely to be killed and my progress lost? The phones I used recently (Xiaomi Mi2s, Xperia Z3 compact, Xperia Z5 compact) have frikin 2GB of memory, so I wonder if nowadays apps are so much more memory demanding then before that this is simply still not sufficient. I just checked settings and some apps I just tested use few tens of MB, so it is still comparable to the times of Windows 98 or Windows mobile IMHO.
My first smartphone was windows mobile Samsung Omnia II with just around 90MB of usable memory and let me tell you that this problem was not happening on it! I could have several tabs with webpages (even non mobile versions) open and could safely switch on the camera, take pictures, write an sms and go back without having to worry that anything will be closed or reloaded! Why can't I open a camera app on Android and take a photo without having the previously open app be closed?
I can even compare today's android phones to one of my oldest pcs back in year 2000 or so. Imagine that it had just 64MB of RAM. I could have open many webpages in Internet Explorer (yeah it was far the best at that time , a few editors for web and text editing and I could even play some game and alt+tab back and forth without any problem! That was Windows 98 guys. Of course you will tell me that today's web pages for example are much bigger then in 2000. OK but what about mobile versions huh? I don't think they are that big so a phone with 2GB of RAM would choke.
I always thought that apps are supposed to be paused/frozen when I switch out of them but left in memory. Unfortunately it seems apps are being killed surprisingly often even when settings / memory shows hundreds of RAM free. The thing that is even more weird to me is that apps I had open just a few seconds ago are being closed upon switching to some other one and back, but the ones which I had active hours ago often stay in memory! That does not make much sense. Why doesn't android kill the longest not active apps first instead? OK, so do I have to buy OnePlus 3 or Meizu Pro 6 with 6GB of RAM to be able to keep simple 3 apps open without worrying that they will reload when switching out of them? As I showed this does not happen on much older devices with similar specs, so is this some fundamental flaw/feature of Android architecture or am I missing some simple explanation?
If you have experience with Windows Phones or iOS regarding this please share and compare.
 
  • Like
Reactions: fbs

luv.

Member
Jul 25, 2016
19
3
0
java :p

---------- Post added at 07:20 PM ---------- Previous post was at 07:11 PM ----------

> Why doesn't android kill the longest not active apps first instead?

There is some heuristic going on that calculate the oom priority and modifies /proc/PID/oom_adj so. For example (foreground) services have lower oom_adj (less likely to be killed by oom-killer). Actually I ended up adding code to my app that overrides /proc/PID/oom_adj to a really low number to keep it running (but that requires root - I also dont understand why *the user* does not have a chance to say "hey android keep running this app in the background!")

> Unfortunately it seems apps are being killed surprisingly often even when settings / memory shows hundreds of RAM free

Yeah that "low memory value" (ie when to kick off the oom-killer) is also set somewhere in /proc (?) It's 200MB on my phone with 2 gigs ram IIRC. To test what's getting killed (and whenl, etc.) this app is superb: https://play.google.com/store/apps/details?id=com.tspoon.androidtoolbelt


it's all even more annoying because starting even basic apps (like dialer or contacts etc. etc.) takes even seconds(!) if they are not in memory already (on any phone!) ... oh, well, java
 
  • Like
Reactions: VitasLoWang

VitasLoWang

Member
Feb 13, 2010
43
2
0
Thanks for a reply! Have anybody tried MIUI? There is an option to lock an application and supposedly prevent it from being killed when multitasking. Just swipe up in tasks view and it marks it with a lock. I have just read this article and it seems manufacturers set these LMK values. I have a feeling they are really high for Sony phones. Maybe if I root mine I would be able to change those. Unfortunately it seems without root I cannot even view these values. They show as 0 in /sys/module/lowmemorykiller/parameters/ and cannot be opened. I can't open those oom files either.
 
Last edited:

luv.

Member
Jul 25, 2016
19
3
0
Oh and it gets worse. Because of this behaviour many apps use a nasty trick of setting up an alarm (usually with wake lock) triggered every second to make sure they are running (if a process is not running and there is an alarm for that process set up, the process is started).

So what happens is that the OOM/low-memory killer kills the app it is started by android framework the next second ... and it might get killed by oom-kiler again ...

It's interesting to run "apktool d foobar.apk" and grep the smali for "AlarmManager.set" on apps that want to run in the background ...
 

VitasLoWang

Member
Feb 13, 2010
43
2
0
CleanMaster app is good and it saved me from exhausted internal capacity issues many times (on Z3Compact) and it also shows apps which frequently restart. Is that because of what you just wrote? I remember it was Pinterest a lot for example.
 

luv.

Member
Jul 25, 2016
19
3
0
and it also shows apps which frequently restart. Is that because of what you just wrote? I remember it was Pinterest a lot for example.
sounds like it could be the case but you it's hard to tell for sure - you would have to have a look at logcat at least