SDK Version: M3
First of all, define what do we mean under "speed": in one hand its the time that the code needs to execute, on the other hand its the time the user needs to wait for the user interface. The two things can greatly differ, of course you must optimize the code performance, but the most important is what the user sees from it. Donít make the user wait, unless its necessary.
Do not pull back the ui thread
The very basic principle is to never run slow operations on the user interface thread! If you do this the interface will freeze until the operation is executed, which is not a nice user experience. If the execution takes too long the android system will detect it and offer the opportunity to the user to force close the frozen application:

Even if the performance of code is very good if you do the work in the ui thread, the nice code goes to waste.
Slow operations
So, which are these slow operations, for example? The most unreliable in speed is network communication. The dispersion on the speed is big, so there is a chance to finish it fast, but it often can take very long time, so never execute network communication in the ui thread.
Database access and sd card operations, especially writing are a bit slow too. In database never forget proper indexing, it can extremely affect database speed.
Emulator and real device
There are differences in speed between the emulator on pc and a real device. The emulator needs a lot of processor speed, if you donít have a powerful machine the application can seem slow, however it runs fast on a real device. The opposite can also happen, the real device uses sd card, the emulator uses the pcís hard drive, which means much faster file access.
Notify the user
When the user have to wait, notifying the user, that he have to wait and the application is working, it is not frozen, showing loading animations etc. makes a better user experience.