Jedaias, I will answer based on my knowledge and what I have developed with each technology.
I believe that more people in the community can contribute to this question. I see that this question is very much fulfilled by those starting out and in some cases can lead you to make a wrong choice.
First what you want to know is very relative.
Each technology or development method you have mentioned has its advantages, disadvantages and specific applications, that is, it depends a lot on what you want to do so I can tell you if this or that is better.
What will guide you best is to know exactly what you want to do in your application, first of all ask yourself:
Will your application run locally or on the cloud?
Does your application require a lot of device features?
Is your application cross-platform (Android, WP, and IOs)?
I particularly do not like either Phonegap or Xamarin (or Mono, or anything like that), this is an opinion and does not mean that I am right, but I always believed that nothing surpasses native development, even which is more laborious and more expensive to maintain, native development is much safer than using source code interpretation and intermediation tools.
Now an idea about each option:
Native Development:
- It is more laborious and expensive, since if your application will be
multiplatform, you will have to learn each language and acquire the necessary tools for each platform;
- If the development is done using good practices and taking advantage of the best of each language, it will certainly perform above average;
- You will have access to all device features.
Phonegap, HTML, CSS, Cordova, etc.
-
Package Web applications in a package that can be installed on the devices;
-
Good for web applications that do not require a lot of features on the device;
-
Provides support for some native device functionality;
-
-
-
Performance is not the strength of this approach, but you can develop a lot of legal stuff;
Xamarin, Mono
-
-
-
-
-
-
-
-
In a project using this approach, you have an area that is shared (Shared) between all platforms and a specific part for each platform, that is, development is multiplatform, plus some parts that are specific to each platform;
-
Because of the above-mentioned feature, in addition to being an approach that enables multiplatform development, it has greater access to the native resources of each operating system;
-
When compiled, it performs closer to the performance of a native application.
That's basically it, and I believe this could be an initial basis for you to choose what's best for you. So based on what I reviewed and the questions I asked at the beginning, I give you my idea below:
My application is not multiplatform and I need maximum performance and access to all device features: Native Development;
I need a cross-platform application to run locally, with database, etc ...: Xamarin, Mono, or natively if I need excellent performance.
My application does not use a lot of features on the device or it will run on a cloud: Phonegap, Cordova, HTML, CSS, etc.
I hope I have helped. Joining this with the link that DiegoFelipe has reviewed, I believe it will be very useful.