These 2 technologies are different and hardly comparable. They have different purposes and can also work together. You could for exemple implement a Loader that uses Volley to load the data and inherits directly from Loader (not AsyncTaskLoader, because Volley handles the threading as well).
Main advantages of using Loaders:
- Lifecycle is synchronized with the Activity/Fragment lifecycle automatically
- Data and loading state is not lost on configuration change
- The loader monitors changes and pushes new results automatically to the client fragment/activity.
Main advantages of using Volley:
- High performance network stack
- Automatic disk cache that respects the HTTP server policy
- Powerful cancelation mechanism.
You can combine both to get both sets of advantages or you can use Volley without loaders with its simple API.