Is it better to bind service to FragmentActivity:
bindService(Intent, ServiceConnection, int);
or to Fragment:
getActivity().bindService(Intent, ServiceConnection, int);
What is better practice?
Is it better to bind service to FragmentActivity... or to Fragment
They are the same as you have them written here. getActivity() is not a Fragment -- it is a method that returns the Activity. You cannot call bindService() on a Fragment.
What is better practice?
Neither. Bind to the Application object, obtained via getApplicationContext(), with the ServiceConnection managed by (or perhaps actually being) a retained Fragment.
The reason is configuration changes. A binding is state. You need to maintain that state across configuration changes. While a retained Fragment can hold onto the ServiceConnection, there is an implicit tie in the system between the ServiceConnection and the Context that registered it for a binding. Since activities can be destroyed and recreated on configuration changes, the Activity is not a good choice of Context here. Application, which is system-global, is a safer choice, and one of the few places where choosing Application over another Context is a wise move IMHO.
Here is a blog post of mine, from a time before fragments, that gets into this a bit more. Here is a sample project demonstrating the technique.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With