一、学习目标
1
、掌握
Service
组件的作用;
2
、掌握不同方法启动
Service
时的执行过程;
3
、掌握使用
AIDL
服务,实现远程调用
Service
过程;
4
、掌握一些常用的服务类:电话管理器,短信管理器等的使用。
二、环境
1.JDK-15.0.2
以上
2.Android Studio 4.1
以上
3.Android 10.0
(
API level 29
)
三、项目实现
1. 项目结构
项目共有 1 个主页面,页面含有 Java 逻辑页面以及 xml 页面。
并且项目内含一个 Service 模块,用于与 Mainactivity 绑定。
2. 模块划分
1)主界面
2)MyService01:service 模块,可以显示当前 count 值(当前既状态)
3. 使用方法:
1) Myservice01
内创建线程用于模拟当前设备状态变化
new Thread(()-> {
while(!quit){
try{
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
MyService01.this.count++;
}
}).start();
2
)
Mainactivity
内不同按键实现的功能,以及数值输出
switch (v.getId()) {
case R.id.btn_main_activity_bind_service:
//如果 service 尚未绑定就绑定,如果已经绑定则忽略
bindService(intent,conn,Service.BIND_AUTO_CREATE);
break;
case R.id.btn_main_activity_get_status:
//如果 service 已经绑定,获取 service 的 count 计数并显示在截面上。
Toast.makeText(MainActivity.this,"Service 的值
为:"+serviceBinder.getCount(),Toast.LENGTH_SHORT).show();
break;
case R.id.btn_main_activity_unbind_service:
//如果 service 已经绑定,则可以解绑,否则忽略
unbindService(conn);
break;
}
4. 测试结果


问题思考
1.
Service
有哪些典型应用场景,
通过 startService()启动的服务处于“启动的”状态,一旦启动,service 就
在后台运行,即使启动它的应用组件已经被销毁了。通常started状态的service
执行单任务并且不返回任何结果给启动者。比如当下载或上传一个文件,当这
项操作完成时,service 应该停止它本身。
Gitee
源码仓库地址
[
项目源码地址
]
https://gitee.com/mo-rugui/XZY4