Fields API vs. fields in hook_schema Can someone please explain what is the advantage of using Fields API to create fields for an entity rather than just declaring them in hook_schema as values? 

It's a bit of work to get all the fields defined, instances, options, allowed and default values, etc. and then you have to deal with getters and setters and finally uninstalling everything is not as simple as db_delete, esp if you have reference fields in use by other entities.
The most important advantage of using fields, rather than custom data in a custom table, is that your data has immediate integration with the rest of the system; including (but in no way limited to):


Automatic integration with Views
Potential to use EntityFieldQuerys
Fields can be managed using the standard system UI, even if built in code
Automatic integration with Features
There are many contributed widgets that can enhance the UI of a field (e.g. the Term Reference Tree widget
No need to load your custom data onto the node/entity in a load hook, the core field system does that for you
No need to define CRUD operations for your data


I'm sure there are many, many more. 

Basically, if you want fine-grained control over the operation/performance of your extra data then use a custom table. If you want the system to handle all of that for you, use a field. For what it's worth I pretty much always use a field to store any entity data these days.