Android基础学习整理知识点(二)
Android四大组件——Service
Service是什么?
可长期运行在后台没有界面的组件。可由其它组件启动,组件通过绑定可以与其交互。
Service类型
1.前台服务执行用户能注意到的操作。音乐播放,用户可以通过通知栏知道当前播放的内容。2.后台服务执行用户不会注意到的操作。上传、定时关闭3.绑定服务绑定后可以与绑定组件进行交互。
Service的注册
与Activity类似需要在AndroidManifest.xml中进行注册。<service android:name=".services.FirstService" />
还能写其他属性android:permission是权限声明,android:process设置具体的进程名称。
Service生命周期
两种绑定方式及其生命周期
- startService方式:onCreate -> onStartCommad -> onDestory(想要启动一个后台服务进行某项任务)
- bindService方式:onCreate -> onBind -> onUnbin -> onDestroy(需要与服务进行通信)
通过bind方式开启的服务会与调用者的生命周期进行绑定,并能进行通信,单启动时,调用者销毁服务也会销毁,start开启的不会销毁但不会通信。当所有的客户端都和service解除绑定后,系统会销毁service。(除非service也被startService()方法开启)
- 混合开启服务方式:onCreate-> onStartCommad -> onBind (想长期运行并通信,调用者结束服务不结束)
开启服务,能够确保服务长期运行绑定服务,能够通信(只把Service的IBinder对象传递给Activity,不会绑定两个对象的生命周期)退出activity,要解绑服务释放资源
Service一般在主线程中,注意不要进行耗时操作。
重复调用startService或者bindService
- 重复调用startService会重复执行onStartCommand,onCreate只会执行一次。
- 重复调用bindService时只回调一次onBind,之后只会直接把IBinder对象传递给后来的客户。
如果Service已经由某个客户端通过StartService()启动,接下来由其他客户端 再调用bindService()绑定到该Service后调用unbindService()解除绑定最后在 调用bindService()绑定到Service的话,此时所触发的生命周期方法如下:
- onCreate( )->onStartCommand( )->onBind( )->onUnbind( )->onRebind( )
问题思考:1.Service与Thread线程的区别?两者没有太大关系,Thread是线程,程序执行的最小单元,分配CPU的最小单元,可以运行耗时操作。Service是安卓的组件,运行在主进程的主线程上。不同的Activity中无法对同一线程进行控制。只要回调了onStartCommad服务就会长期运行,尽管调用者销毁。(没有服务内容)65s后会自动销毁。(Android12)![]()
2.Service应用场景:音乐播放、下载、上传大文件、定时关闭应用的功能。
3.Service里可以弹Toast吗?为什么?可以,一它在主线程,可以刷新UI,二是context的子类有上下文。有些时候就可以通过toast告诉用户发生了什么事。
4.一个服务可以被多个客户端(Activity)绑定吗?可以,但只有第一个组件绑定时才调用onBind(),其它的只是传递个IBinder对象给绑定组件以便通信。
5.为什么需要前台服务?若服务在后台的运行,当内存不足时可能会优先对其进行回收,为了能够保持服务长期工作可置为前台服务。
Android技术 文章被收录于专栏
热门Android技术学习