Android四大组件学习笔记(二)_Service

本文详细解析了Android Service的原理及应用,包括Service的生命周期、启动方式、与Activity间的通信、前台Service的创建以及子线程Service的使用。同时介绍了部分常用控件的使用技巧。
摘要由CSDN通过智能技术生成

1. 什么Service

       Service是Android四大组件之一,是程序实现后台运行的解决方案,用于去执行一些不需要和用户交互而且还要求长期运行的任务,比如后台播放音乐,计时器等。
  Service不能独立运行,需要某个Activity来启动,依赖于该Activity所在的应用程序进程。

2. Service的生命周期

  1. onCreate():创建Service,如果Service已经存在,则不会重复调用。
  2. onStartCommand():写入Service的逻辑功能,可以多次调用。
  3. onBind():Service类中唯一的抽象方法。
  4. onUnbind():写入Service解绑时的一些操作。
  5. 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()

  1. 首先在Service的类中新建一个Binder内部类,在其中写入Service的操作内容。
  2. 实现ServiceConnection内部类,重写其onServiceConnected()与onServiceDisconnected()方法,将新建的Binder对象与ServiceConnection绑定。
  3. 在bindService()时,调用ServiceConnection对象。
  4. onBind()方法中,返回值设为Binder对象。

5. 前台Service

       避免Service被系统回收的方法:
android:priority="1000"或者android:persistent="true"
  前台Service能够以Notification的形式显示出来,在系统内存不足的情况下,不会被自动销毁,并且能满足特定情况下的设计需求,如天气应用、后台播放音乐等。
  在创建出Notification对象后,通过startForeground()方法,来启动前台Service。

IntentService——子线程Service

重写onHandleIntent()方法,在其中写入Service功能。
特征:

  1. 异步
  2. 执行完毕自动停止

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有非常多的形式,包括普通(包含提示消息和按钮)、列表、单选、多选、等待、进度条、编辑、自定义等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值