From my perspective there is one main reason why Android, at the moment, can’t compete with iOS.
It’s not the hardware – meanwhile the hardware of mobiles like the Samsung Galaxy SII is somehow even better than the iPhone 4.
And it’s not the operation system – Android is based on Linux, a Unix comparable to the Unix of iOS.
The problem of Android is Java, the programming language of Android apps. And not because Java is a bad programming language. but because it’s has disadvantages over compiled languages like Objective C, C or C++.
You can’t feel this disadvantage on servers or powered desktops, where Java has its strength developing complex systems, but on small devices with limited batterie resources the difference between compiled and not and automatic memory management matters.
Java is easy to develop and easy to learn, the developer has the choice to integrate a huge amount of third party libs, but when it comes to the runtime costs of Java, compiled languages have their advantages and these are directly related to the user experience.
Java needs a lot of energy and often stops the processor because of it’s automatic memory management. And this automatic memory management also and often leeds to improper application design, because the developer doesn’t have to care for memory management. Huge server systems or strong machines forgive these applications and their developers their mistakes (a/the reason why Java was invented), a mobile not really.
And due to the given physical boundaries I don’t really believe that this behaviour will change soon, even if you power 2 or 4 cores in your mobile.
So my advise for Google would be: Change the programming language, choose a native language for Linux, be as pure as possible. I’m sure the Android developers will follow you.
And besides you can solve your patent problems with Oracle. Pay nothing.