IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 【Android 笔记】Service(服务) -> 正文阅读

[移动开发]【Android 笔记】Service(服务)

一、简介

Service是Android四大组件之一,也可以称为后台服务。Service是一个可以长期在后台执行而不用提供用户界面的应用组件。服务可由其它应用组件启动,即使切换到其它应用组件,服务依然会在后台继续运行。

此外,组件可以绑定到服务,并与之进行交互,甚至是执行进程间通信(IPC)。

例如,服务可以处理网络通信,播放音乐\电影,执行文件I/O,这一切的操作都是在后台进行的。

服务分为两类,第一类是本地服务(Local Service);第二类为远程服务(Remote Service)。

二、服务注册

服务(Service)与Broadcast Receiver(广播)一样在Androidmanifest.xml(清单文件)中注册。

 1 <!-- 服务注册 -->
 2 <!-- exported设置允许其它应用启动此服务 -->
 3 <!-- permission是此服务的权限,只能由符合权限的应用的调用此服务 -->
 4 <service
 5     android:name=".CustomService"
 6     android:exported="false"
 7     android:permission="com.example.SERVICE.TESTDEMO">
 8     <intent-filter>
 9         <action android:name="testdemo"/>
10     </intent-filter>
11 </service>

(1). exported是设置是否允许其它应用启动此服务,默认值是通过是否有intent-filter来设置,有intent-filter为true,反之为false。当为true时,允许其它应用启动此服务。

(2).android:permission是设置服务权限,只有申请了此权限的应用的才能启动并调用此服务。

三、服务启动

1. 通过startService启动服务
    startService(...) -> onCreate(...) -> onStartCommand(...) ,服务只能停止一次,通过stopService(...)或者stopSelf()方法停止服务后,会调用onDestory()方法,销毁服务。如果,服务没有被停止、销毁,再次使用startService(...)启动服务时,会从onStartCommand(...)方法开始执行。

停止服务
    1. stopService(...):通过另一个组件调用此方法停止服务。

2. stopSelf():通过此方法在服务自身停止本服务。

服务生命周期
  1. 在调用startService(...)方法启动服务后,服务内部调用方法流程:

(1). onCreate()方法;

(2). onStartCommand(Intent intent, int flag, int startId)方法;(允许组件启动服务)

2. 在调用stopService(...) 方法停止服务后,服务内部调用方法流程:

(1). onDestroy()方法;// 销毁服务

PS:在下次再次启动服务(调用startService(...)方法)时,会再次从onCreate(...)方法开始。当然,在服务已经启动了,再次使用startService(...)方法启动服务,就不会从onCreate(...)方法开始执行,因为,服务已经启动了,只会从onStartCommand(...)方法开始。

特点:使用startService(...)开启服务,服务就和调用者(开启者)没有任何关系了,即使调用者(开启者)退出了或者挂掉了,服务依然在后台运行,不会随着调用者(开启者)退出或者挂掉而结束,只能通过stopService(...)或者服务内部方法stopSelf()方法停止,服务停止立即销毁(就是会调用onDestroy()方法)。并且这种服务开启方式是不能调用服务内部方法的。(startService(...)开启的服务也可以称为远程服务)

2. 通过bindService启动服务
  通过其它组件与服务进行绑定的方式开启服务。

使用bindService(...)启动服务是不会调用onStartCommand(...)方法的。

可以通过unBindService(...)方法停止服务。

生命周期:

onCreate() --> onBind() --> unOnBind() --> onDestory()

特点:使用bindService()方法启动服务,绑定服务后,组件的生命周期结束,服务的生命周期也随之结束,也就是调用者(开启者),退出或者挂掉后,服务也随之结束。通过bindService(...)方法启动绑定的服务,调用者(开启者)可以调用服务的内部方法。(通过bindService(...)开启的服务,也可以称为本地服务)

四、服务(Service)生命周期内所有方法(包括两种开启方式)

 1 public class CustomService extends Service
 2 {
 3     private final static String TAG = "CustomService";
 4 
 5     @Nullable
 6     @Override
 7     public IBinder onBind(Intent intent)
 8     {
 9         Log.d(TAG, "onBind");
10         return null;
11     }
12 
13     @Override
14     public void onRebind(Intent intent)
15     {
16         super.onRebind(intent);
17         Log.d(TAG, "onRebind");
18     }
19 
20     @Override
21     public boolean onUnbind(Intent intent)
22     {
23         Log.d(TAG, "onUnbind");
24         return super.onUnbind(intent);
25     }
26 
27     @Override
28     public void onCreate()
29     {
30         super.onCreate();
31         Log.d(TAG, "onCreate");
32     }
33 
34     @Override
35     public int onStartCommand(Intent intent, int flag, int startId)
36     {
37         Log.d(TAG, "onStartCommand");
38         return super.onStartCommand(intent, flag, startId);
39     }
40 
41     @Override
42     public void onDestroy()
43     {
44         super.onDestroy();
45         Log.d(TAG, "onDestroy");
46     }
47 }
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:10:25  更:2021-12-10 11:12:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:40:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码