文章目录
1. 什么Service
Service是Android四大组件之一,是程序实现后台运行的解决方案,用于去执行一些不需要和用户交互而且还要求长期运行的任务,比如后台播放音乐,计时器等。
Service不能独立运行,需要某个Activity来启动,依赖于该Activity所在的应用程序进程。
2. Service的生命周期
- onCreate():创建Service,如果Service已经存在,则不会重复调用。
- onStartCommand():写入Service的逻辑功能,可以多次调用。
- onBind():Service类中唯一的抽象方法。
- onUnbind():写入Service解绑时的一些操作。
- onDestroy():用于Service销毁。
3. Service的启动方式
3.1 startService()——启动服务
Service以该方式启动后,其将会独立的存在且不会继续依赖于它的启动者,直到有进程调用stopService()方法,或者自己调用了stopSelf()方法,才会结束。
3.2 bindService()——绑定服务
以这种方式启动的Service会与启动者共存,依赖于启动者生命周期的变化而变化。如果启动者销毁或者调用unbindService()方法,Service则会被销毁。
3.3 启动服务与绑定服务的转换
1 先绑定,后启动
如果当前Service实例先以绑定状态运行,然后再以启动状态运行,那么绑定服务将会转为启动服务,这时如果之前绑定的宿主(Activity)被销毁了,也不会影响服务的运行,指定收到调用停止服务或者内存不足时才会销毁服务。
2 先启动,后绑定
如果当前Service实例先以启动状态运行,然后再以绑定状态运行,当前启动服务并不会转为绑定服务,但是还是会与宿主绑定,只是即使宿主解除绑定后,服务依然按照启动服务的生命周期在后台运行,直到有Context调用了stopService()或是服务本身调用了stopSelf()方法抑或内存不足时才销毁服务。
4. Service与Activity间通信——onBind()
- 首先在Service的类中新建一个Binder内部类,在其中写入Service的操作内容。
- 实现ServiceConnection内部类,重写其onServiceConnected()与onServiceDisconnected()方法,将新建的Binder对象与ServiceConnection绑定。
- 在bindService()时,调用ServiceConnection对象。
- onBind()方法中,返回值设为Binder对象。
5. 前台Service
避免Service被系统回收的方法:
android:priority="1000"或者android:persistent="true"
前台Service能够以Notification的形式显示出来,在系统内存不足的情况下,不会被自动销毁,并且能满足特定情况下的设计需求,如天气应用、后台播放音乐等。
在创建出Notification对象后,通过startForeground()方法,来启动前台Service。
IntentService——子线程Service
重写onHandleIntent()方法,在其中写入Service功能。
特征:
- 异步
- 执行完毕自动停止
6. 部分控件
ImageView
ImageView是用于在界面上显示图片的控件,可以对图片进行放大、缩小和旋转等。
android:background/setBackgroundColor():设置背景颜色。
android:adjustViewBounds/setAdjustViewBounds():设置ImageView是否调整自己的边界来保持所显
示图片的长宽比。
android:maxHeight/setMaxHeight():设置ImageView的最大高度。
android:maxWidth.setMaxWidth():设置ImageView的最大宽度。
android:scaleType/setScaleType():设置所显示的图片如何缩放或移动以适应ImageView的大小。
CheckBox
通过CheckBox,可以实现单选、多选、反选等功能。
CheckBox选定事件监听:
CheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
}
});
RadioButton
RadioButton即单选框,是一种基础的UI控件。RadioGroup为我们提供了RadioButton单选按钮的容器,
RadioButton通常放于RadioGroup容器中进行使用。RadioButton的选中状态,在xml文件中可以使用
android:checked=""来进行设置,选中就设置为true,没选中就设置为false。
RadioGroup选定事件监听:
RadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
}
});
ProgressBar
ProgressBar,进度条,是AndroidUI界面中一个非常实用的组件,通常用于向用户显示某个耗时操作完成的百分比,从而避免长时间执行某个耗时的操作,而让用户感觉程序失去了响应,从而提高界面的友好性。
ProgressBar分为圆形和水平,通过style="@android:style/Widget.ProgressBar.Horizontal"
属性切换。
ProgressBar的关键属性:
android:max 最大值
android:proress 第一进度值
android:secondprogress 第二进度值
android:interminate 是否精确显示
Dialog
Dialog就是一个在屏幕上弹出一个可以让用户做出一个选择,或者输入额外的信息的对话框,一个对话框并不会沾满我们整个的屏幕,并且通常用于模型事件当中需要用户做出一个决定后才会继续执行。Dialog有非常多的形式,包括普通(包含提示消息和按钮)、列表、单选、多选、等待、进度条、编辑、自定义等。