Battery technology hasn't evolved as quickly as other areas of technology, leading to the fact that batteries are mostly the limiting factor in any mobile computing experience. While you could wait on the hardware end to remedy this problem, you could also try to solve it from the software side of things. This is exactly what this Stanford project, called Cinder OS, is trying to do.
For instance, Cinder knows exactly how much power each component or application is using, and you can budget the power reserves it has. For instance, you can boost power to a certain application, or you could tell Cinder to make sure that you can watch that entire 2 hour movie on your mobile device. Cinder will then budget and allocate power in such a way that you will be able to complete your movie.
Other mobile platforms often suffer from power drains caused by stray processes or background applications. Instead of having to hunt down the faulty process or application, Cinder can do that work for you because it knows exactly which process or application is using what amount of power.
These power features also come into play when it comes to new applications. To make sure newly installed applications do not strain the battery too much, they can be executed in a constrained mode where they can only use up a limited amount of energy. At the user's discretion, the application can then be unconstrained if they decide to keep on using it.
Cider has been ported to ARM, and is currently being ported to the T-Mobile G1, and it takes a few cues from HiStar, another Stanford project. There's a presentation that provides a little more details on this subject.