android – 绑定到onCreate()或onResume()中的服务

我想知道活动中绑定到服务的最佳位置是什么?
我看到例子在onResume()和onCreate()中执行。我问自己是不是把它放在onCreate()中的问题,因为在onPause()我会做一个unbind的服务,所以我没有得到一个serviceConnectionLeak,如果我离开活动。现在,如果我按主页按钮然后切换到主屏幕,活动将从服务解除绑定,当我从任务管理器返回到活动时,则将不会调用onCreate(),如果代码正在尝试从服务访问一个函数,我会得到一个NullPointerException。如果我仅在onResume()和onPause()中绑定和解除绑定,我没有这个问题。我对吗?
我通常建议在onCreate()/ onDestroy()或onStart()/ onStop()中执行此操作,具体取决于所需的语义:

>如果您的Activity想要在整个运行过程中与服务器进行交互(例如,它可以从您的网络中检索一些数据,并且在准备好时返回数据,并且您希望在后台执行此操作)所以如果用户返回你将有数据准备好),那么onCreate()/ onDestroy()可能是适当的。请注意,这里的语义是,您的Activity运行它的整个时间都需要服务,因此如果此服务在另一个进程中运行,那么您已经增加了它的重量,并使其在后台被杀死的可能性更大。
>如果您的活动只对可见的服务感兴趣,则onStart()/ onStop()是适当的。这意味着当用户离开时,您的活动将会从服务中取消绑定(并且不再可见),并在下一次返回并重新启动并重新启动时重新连接。

我通常不建议在onResume()和onPause()中做bind / unbind。这些通常不会显着降低您使用服务的数量(从而导致开销),实际上,由于每次活动过渡都会发生暂停和恢复,所以您希望保持尽可能轻盈的代码路径。在这里执行此操作可能会产生其他意外的负面后果:例如,如果您的应用程序中的多个活动绑定到同一个服务,当这两个活动之间存在过渡时,服务也可能会被破坏并重新创建,因为当前活动在下一个恢复。

另外这些对(onCreate()/ onDestroy(),onStart()/ onStop(),onPause()/ onResume())都是用于获取和释放资源的正确对(例如绑定到服务,注册接收器,等等),以确保在不再需要时,在需要和释放(而不是泄露)之前,正确获取它们。

http://stackoverflow.com/questions/2304086/binding-to-service-in-oncreate-or-in-onresume

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:android – 绑定到onCreate()或onResume()中的服务