service
介绍:
应用程序的一个组件,可以在后台长时间执行耗时操作,并没有提供一个用户界面。另一个应用程序组件可以启动一个服务,它会继续在后台运行,即使用户切换到另一个应用程序。此外,一个组件可以绑定到一个服务与它交互,甚至进行进程间通信(IPC) 。例如,服务可能处理网络服务,播放音乐,执行文件的I / O等。默认情况下,一个服务运行在承载它的应用程序的主线程中。
来自官方开发者文档:
A services runs in the same process as the application in which it is declared and in the main thread of that application, by default. So, if your service performs
intensive or blocking operations while the user interacts with an activity from the same application, the service will slow down activity performance. To avoid
1. startService(Intent service)
2. bindService(Intent service, ServiceConnection conn, int flags)
区别:如果用startService方式启动服务,服务会常驻在内存中。除非用户手动停止。 只有当内存低,必须恢复对系统资源的活动,用户关注的焦点Android系统将强制停止服务, 。如果该服务是必然的活动,用户关注的焦点,那么它是不太可能被销毁,并宣布如果该服务是在前台运行,那么它几乎不会被杀死。否则,如果该服务已启动,并长期运行的,那么该系统将降低其随着时间的推移和服务的后台任务列表中的位置将变得非常容易受到销毁,如果您的服务已启动,那么你必须设计妥善处理系统重新启动。如果系统销毁你的服务,尽快重新启动它作为资源再次可用(尽管这也取决于你返回值onStartCommand( ))。
如果用bindService方式启动服务,启动服务的组件被系统销毁前,服务会被系统销毁。也就是受服务的生命周期会随着启动它的组件的销毁而消亡。
注意:bindService开启了一个服务后,一定要记得执行停止服务操作。否则系统将会抛出 android.app.ServiceConnectionLeaked异常
生命周期
介绍:
应用程序的一个组件,可以在后台长时间执行耗时操作,并没有提供一个用户界面。另一个应用程序组件可以启动一个服务,它会继续在后台运行,即使用户切换到另一个应用程序。此外,一个组件可以绑定到一个服务与它交互,甚至进行进程间通信(IPC) 。例如,服务可能处理网络服务,播放音乐,执行文件的I / O等。默认情况下,一个服务运行在承载它的应用程序的主线程中。
来自官方开发者文档:
A services runs in the same process as the application in which it is declared and in the main thread of that application, by default. So, if your service performs
intensive or blocking operations while the user interacts with an activity from the same application, the service will slow down activity performance. To avoid
impacting application performance, you should start a new thread inside the service.
在主线程中运行的服务,其宿主进程的服务并不创建它自己的线程,并不在一个单独的进程运行(除非您另行指定) 。这意味着,如果你的服务是打算做任何CPU密集型工作或阻塞操作(如MP3播放,或网络),你应该创建一个新线程在服务做这项工作 。通过使用一个单独的线程,你会降低应用程序无响应(ANR)错误,并致力于用户交互的应用程序的主线程可以继续与您的活动的风险。
1. startService(Intent service)
2. bindService(Intent service, ServiceConnection conn, int flags)
区别:如果用startService方式启动服务,服务会常驻在内存中。除非用户手动停止。 只有当内存低,必须恢复对系统资源的活动,用户关注的焦点Android系统将强制停止服务, 。如果该服务是必然的活动,用户关注的焦点,那么它是不太可能被销毁,并宣布如果该服务是在前台运行,那么它几乎不会被杀死。否则,如果该服务已启动,并长期运行的,那么该系统将降低其随着时间的推移和服务的后台任务列表中的位置将变得非常容易受到销毁,如果您的服务已启动,那么你必须设计妥善处理系统重新启动。如果系统销毁你的服务,尽快重新启动它作为资源再次可用(尽管这也取决于你返回值onStartCommand( ))。
如果用bindService方式启动服务,启动服务的组件被系统销毁前,服务会被系统销毁。也就是受服务的生命周期会随着启动它的组件的销毁而消亡。
注意:bindService开启了一个服务后,一定要记得执行停止服务操作。否则系统将会抛出 android.app.ServiceConnectionLeaked异常
生命周期
1. startService --->onCreate--->onStartCommand---> onDestroy 服务关闭
2. bindService--->onCreate--->onBind--->onUnbind---> onDestroy服务关闭
官方开发者文档: