1. Using Android Emulator as a substitute for physical devices

Android emulator is an excellent tool for quickly testing and debugging your app; but it's not the same as testing on real devices. If you don't test and debug your app on various screen sizes, hardware features and different OS versions, there could be problems that only show up when running your apps. For example, if you upload a video to youtube from your android app and all we can see is just a black screen instead of watching the video then it's either an issue with youtube or there is something wrong with using android emulator as its substitute for physical devices. So always test your code after adding new features to ensure every part of the code runs smoothly on both real devices and emulators.

  1. Not using source code versioning

Source code versioning is a system that records changes to a file or set of files over time so you can recall specific versions later. Version control software keeps track of every change made in the project and it can be used to revert back your project to older versions, identify when bugs were introduced and collaborate with other developers from a single copy of a project. There are many free source code management tools available on the internet such as git, Mercurial, Subversion etc… So just choose any one depending on your requirement and start using it for tracking your work throughout the team development process. I personally recommend Git, which has become the most popular version control system right now because it's easy to use and it's available on all platforms.

  1. Not Testing 3rd party libraries before using them in your Project

It is always advisable to try out any library you are going to use before actually using it in your project because they might contain bugs or vulnerabilities that can affect your app behavior and possibly harm user data as well. So always read the license of the library carefully and, if possible, download an open source code example from its home page to avoid security problems with both your app and server-side app such as unauthorized access, data leakage etc…

  1. Focusing too much attention on log messages

Every android developer wants his/her app to be stable and work smoothly without crashing but sometimes due to negligence or lack of experience we write code that results in app crashes. In such cases, it's always necessary to write proper log messages so that other developers or yourself after some time can debug the issue easily by reading the log file. But logging too much information is not good either because excess of anything is bad and this rule applies for logging as well; if you write all the logs in one single activity then your log file will be filled with lots of unnecessary or irrelevant data which might even slow down your android phone due to heavy disk usage. So keep things under control everywhere including log files ; use them only when needed to avoid performance issues on both server-side and client-side apps.

  1. Using complex memory management schemes

Memory management is a complicated yet an essential process for any android app development project. There are many different types of memory management schemes available to deal with this issue such as reference counting, object pooling etc… but using them is not a good idea because it makes your code very difficult to debug and maintain . In fact, most developers use a single technique called "Garbage Collection" which automatically releases the memory used by objects that are no longer required or referenced by an active part of the user interface. So make sure you don't go deep into various memory management techniques unless you have ample time and patience for studying about these things.

  1. Using un-documented third party components

Many newbie Android developers tend to learn from tutorials on various blogs and those tutorial's authors usually use some kind of open source components. So they just find any component that is similar to their needs, copy the implementation and build their app without even knowing about the license or author's idea. This approach might work most of the time but in some cases you might not be allowed to use it at all because every developer has his/her own preference for choosing a certain library over another one. Also if your project depends on third party libraries built with different licenses then your project inherits those license sections so before using any third party library always make sure it has an acceptable open source license such as Apache Software License 2.0 .

  1. Not Optimizing Network Requests

Network speed continues to be a major issue particularly when transferring large data because even mobile phone networks are not that fast. To optimize your network performance you should use compression algorithms on both server-side and client-side apps. Using GZIP compression on the server reduces the size of transmitted data by about 70% which means it would take only a quarter of time required for sending uncompressed data, so I always prefer this type of encoding over others . And if you find yourself doing many HTTP requests then try batching them to reduce the number of requests because more requests mean slower app response times so keep in mind that Http is basically designed for a one-time request/response pattern , once initiated there are no guarantees that it will be completed at all!

  1. Not Understanding Android Activity Lif

Every android developer knows how to create an activity but knowing how to manage or keep activities in memory is another important issue. So if you are working on a simple app that just does one thing then there's no need to worry about managing activities because android OS will do it for you automatically . But if your app requires users to navigate your menu structure, make network calls etc.. then you should remember that Android garbage collector deals with the transient UI states while Android OS deals with background tasks using a separate process called "Service" , If the user returns to any view which was previously destroyed by GC then that view stays in memory till service is active ! So always understand your requirements before implementing anything into your android apps.

  1. Not Using Content Providers for Data Sharing

Android has its own data management solution and it's called "Content Providers" which can be used to share and access data across application boundaries. For instance, if you have two different apps that need access to user contacts then instead of storing them in internal storage just share them using a content provider so each app would only use its own namespace while the other one wouldn't see any change at all . Also note that having a good content provider implementation makes it very easy for other apps to add new data into your app but on the other hand if you don't provide required methods then there is nothing an external app can do without hacking your app source code .

  1. Having Too Many Activities

Having multiple activities within a single activity group (known as "Task") might work most of the time because android runs each activity as a separate process. So if you open and close an activity then it will create a new process for that and this way your app memory usage would be divided over different processes but there might also be some performance issues because every time you change between activities their current states are destroyed and recreated from scratch . Also SharedPreferences (used to save simple data) works only at the process level so don't expect them to live through process death unless you use content providers which can be used to access each other's data .

Conclusion:

Android is still growing rapidly which means more apps, more developers! Also the Android community is very excited about developing new apps using latest technologies like Android 4.0 (Ice Cream Sandwich) and this is why we see a huge surge of newbies willing to start learning android application development . But as you already know how complex Android OS can be, if you don't have much background about its architecture then there are lots of common mistakes which may affect your app performance and stability. And even worse, those mistakes can go unnoticed until users complain about their issues or something like that (which I've seen many times over the past years). So always understand your requirements before doing anything into your apps because more components within an app means great responsibility .