Windows locks files based on their names, so a lot of system updates can only be done when no process has locked files affected by the update. Essentially, for a short period in the Windows Boot process, Windows is running invisibly in "DOS" mode where you don't have all those processes locking the files. Unix/Linux are not so constrained because they lock on inodes, and the connection between filename and inode can be re-mapped to another inode at almost any time, with existing holders of the old node retaining it until they release it. A side effect of that being that you can delete an open file, but the space it uses won't be freed until after the file is closed.
Android apps, on the other hand are more like a bundle of running classes and replacing running code on the fly is trickier than re-pointing to a different file, since you have to evict the old code from the classloader.
Actually
Java had a really bad problem for certain
Tomcat releases because back then Java supported a special memory partition called "PermGen" space. Certain static objects would get stored in PermGen and couldn't be replaced without restarting the JVM. which meant that even though Tomcat supported (and still supports) hot updates on apps, their PermGen components would remain and eventually you'd be forced to restart when the PermGen space ran out.
The secret of how to be miserable is to constantly expect things are going to happen the way that they are "supposed" to happen.
You can have faith, which carries the understanding that you may be disappointed. Then there's being a willfully-blind idiot, which virtually guarantees it.