| |
|
开发:
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 有绑定模式和非绑定模式,以及这两种模式的混合使用方式。不同的使用方法生命周期方法也不同。
上面的两种生命周期是在相对单纯的模式下的情形。注意 Service 实例只会有一个,也就是说如果当前要启动的 Service 已经存在了那么就不会再次创建该 Service 当然也不会调用 onCreate()方法。 在startService中 步骤: 1、定义一个类继承于Service 2、在Manifest.xml文件中配置该Service 3、使用Context的startService(Intent)方法启动该Service 4、不再使用时使用stopService(Intent)方法停止该服务 每次通过startService(Intent)方法启动Service时都会调用。其中我们可以注意onStartCommand是有返回值的。
在bindService中 步骤: 1、定义一个类继承Service,创建一个继承与Binder的实例对象,并提供公共方法供客户端调用。 2、实现onBind()方法,返回Binder实例 3、在Manifest.xml文件中配置该Service 4、在客户端中,实现ServiceConnection实例,从onServiceConnected()回调方法接收Binder,并使用bindService绑定服务。 注:onServiceDiscounnection方法是在服务崩溃或者服务杀死导致的连接中断时调用 首先会调用onCreate,然后调用onBind方法,然后在Activity与Service解绑时调用Unbind方法,最后在所有Activity与Service解绑后,该Service会销毁,并调用onDestroy方法。 onBind:绑定服务才会调用,但注意即使我们用startService也要实现该方法。 一个 Service 可以被多个客户进行绑定,只有所有的绑定对象都执行了onBind()方法后该 Service 才会销毁,不过如果有一个客户执行了 onStart()方法,那么这个时候如果所有的 bind 客户都执行了 unBind()该 Service 也不会销毁。 混合使用 在这之前,要知道一个原则是 Service 的 onCreate 的方法只会被调用一次,就是你无论多少次的startService又bindService,Service只被创建一次。
混合使用时的生命周期 可以,弹吐司有个条件就是得有一个 Context 上下文,而 Service 本身就是 Context 的子类,因此在 Service 里面弹吐司是完全可以的。 可以直接在Service中onStartCommand()方法中可以执行网络操作,service 里面不能执行耗时的操作(网络请求,拷贝数据库,大文件 ),如果需要在服务中进行耗时操作,可以选择IntentService, IntentService是Service的子类,用来处理异步请求。 IntentService 是 Service 的子类,比普通的 Service 增加了额外的功能。
IntentService的特征
在一个app的情况下,默认是在同一个线程中的,main Thread (UI Thread)。 Thread是程序运行的最小单元——线程。 Service是安卓的一种机制,运行在主线程,因此在Service中进行耗时操作也需要开启新的线程。 那为什么还要Service不在Activity中直接操作Thread呢? 因为activity很难对Thread进行管理,当activity销毁了,之后的activity就没办法获取到之前创建的Thread。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/23 16:45:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |