Service学习以及BindService的使用

article/2025/10/1 9:25:53

Service

什么是Service

Service是一个可以在后台执行长时间操作而不使用用户界面的应用组件。

如何使用Service

我们首先需要实现一个Service的子类。主要实现Service的onCreat(),onStartCommand(),onBind(),onDesroy(),其中onBind()只有在需要与activity有交互的时候才会调用。由于很多时候我们需要在service中进行许多比较耗时的操作,所以我们常常需要在其中开启子线程,因为每次都需要在线程任务执行之后去调用stopSelf()。
在这里插入图片描述

Service与Activity通信

从上面的生命周期,可以看出,当用startService()来启动一个Service的时候,这个服务的执行就不再受到控制,为了与某个服务通信,我们可以使用bindService()来启动一个Service。Google的例子如下:

public class MyService extends Service {private static final String TAG = "MyService";@Overridepublic void onCreate() {super.onCreate();Log.d(TAG, "onCreate");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.d(TAG, "onStartCommand");return super.onStartCommand(intent, flags, startId);}//当其他组件调用bindService()方法时,此方法将会被调用//然后返回一个Binder对象//如果不想让这个service被绑定,在此返回null即可@Nullable@Overridepublic IBinder onBind(Intent intent) {Log.d(TAG, "onBind");LocalBinder binder = new LocalBinder();return binder;}@Overridepublic void onDestroy() {Log.d(TAG, "onDestroy");//service调用的最后一个方法//在此进行资源的回收super.onDestroy();}/** method for clients */public int getRandomNumber() {return mGenerator.nextInt(100);}/*** Class used for the client Binder.  Because we know this service always* runs in the same process as its clients, we don't need to deal with IPC.*/public class LocalBinder extends Binder {MyService getService() {// Return this instance of LocalService so clients can call public methodsreturn MyService.this;}}
}

使用bindService()和startService()的最大区别就是对于Service中的onBind()实现,当执行到这一步的时候会返回一个Binder对象,这个就是开始与Service通信的节点。

public class MyActivity extends Activity {LocalService mService;boolean mBound = false;/** Defines callbacks for service binding, passed to bindService() */private ServiceConnection mConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName className,IBinder service) {// We've bound to LocalService, cast the IBinder and get LocalService instanceLocalBinder binder = (LocalBinder) service;mService = binder.getService();mBound = true;}@Overridepublic void onServiceDisconnected(ComponentName arg0) {mBound = false;}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}@Overrideprotected void onStart() {super.onStart();// Bind to LocalServiceIntent intent = new Intent(this, LocalService.class);bindService(intent, mConnection, Context.BIND_AUTO_CREATE);}@Overrideprotected void onStop() {super.onStop();// Unbind from the serviceif (mBound) {unbindService(mConnection);mBound = false;}}/** Called when a button is clicked (the button in the layout file attaches to* this method with the android:onClick attribute) */public void onButtonClick(View v) {if (mBound) {// Call a method from the LocalService.// However, if this call were something that might hang, then this request should// occur in a separate thread to avoid slowing down the activity performance.int num = mService.getRandomNumber();Toast.makeText(this, "number: " + num, Toast.LENGTH_SHORT).show();}}
}

通过上面的代码我们可以看出,执行bindService()需要是三个参数,一个是intent,一个是ServiceConnection,第三个是一个flag,一般使用BIND_AUTO_CREATE。而Activity与Service的通信主要就是通过这个对象来实现的,我们可以很容易的看出其中两个函数的作用,在Activity与Service执行bind的时候,会将Service中onBind()返回的Binder对象,我们可以通过onServiceConnected()持有它的一个引用,这样我们就可以通过它与Service内部进行通信了。


http://chatgpt.dhexx.cn/article/DgoM0dmp.shtml

相关文章

Android中bindService的使用及Service生命周期

Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法,本文只探讨纯bindService的使用,不涉及任何startService方法调用的情况。如果想了解startService相关的使用,请参见《Andr…

粒子群算法笔记

实质:在定义域随机放置多个变量,不断跳跃,同步寻找最优解。寻找方向受单个粒子与全部粒子的最优位置共同影响。单个粒子按照公式不断迭代寻找当新位置。多个变量聚集在某一点时,该点即是最优解。 控制其搜索速度(步长…

粒子群算法及C++实现

参考博客 https://www.cnblogs.com/alan666/p/8311804.html https://blog.csdn.net/weixin_39059031/article/details/103723843 https://blog.csdn.net/weixin_40679412/article/details/80571854 https://blog.csdn.net/daaikuaichuan/article/details/81382794 https://blo…

粒子群算法详解

一.产生背景 ❃粒子群算法(particleswarm optimization,PSO)由Kennedy和Eberhart在1995年提出,该算法对于Hepper的模拟鸟群(鱼群)的模型进行修正,以使粒子能够飞向解空间,并在最好解处降落,从而得到了粒子群优化算法。…

高铁列车粒子群算法及改进粒子群算法多目标单目标运行优化设计

问题介绍 根据表1、2、3 所列数据,以能耗、运行时间、舒适性为目标分别设计列车运行速度—距离曲线;完成单目标以及多目标优化下的列车运行对比;选择其中一种方案,设计列车速度跟踪控制算法并进行性能分析。 1 列车参数设置表优化…

智能优化算法之粒子群算法

1、粒子群优化算法概述 粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优…

基于群智能的三维路径规划算法 2 —— 粒子群算法

目录 1 PSO算法的基本理论2 PSO算法程序设计流程3 MATLAB编程实现4 算法举例5 函数1 unifrnd函数 1 PSO算法的基本理论 将三个散点看做一个粒子 惯性分量就是 v i − 1 d v^d_{i-1} vi−1d​ 粒子群(PSO)算法是依托群鸟觅食的模型寻找最优解。群体特征…

粒子群算法(2)

上一期:粒子群算法(1) 线性递减惯性权重 惯性权重w体现的是粒子继承先前的速度的能力,Shi,Y最先将惯性权重w引入到粒子群算法中,并分析指出一个较大的惯性权值有利于全局搜索,而一个较小的权值则更利于局部…

粒子群算法简介

粒子群算法简介 前言 本文内容借鉴于 刘衍民的博士论文:“粒子群算法的研究及应用”. 现有的大多数群智能算法,如:乌鸦算法、鸽子算法、蚁群算法、萤火虫算法和灰狼优化算法等,都可以归类为粒子群算法.(个人觉得,这些算法就是整个稀奇古怪的名字,颇有舞文弄墨,强…

粒子群算法(1)

粒子群算法 1.入门 粒子群算法,其全称为粒子群优化算法(Particle Swarm Optimization,PsO)。它是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的搜索算法。 2.什么是启发式算法? 启发式算法百度百科上的定义:一个基于直观或经验构造的算法,在可…

粒子群优化算法

背景 1995 年,Kennedy 和 Eberhart 两位博士共同 提出了粒子群优化算法 (Particle swarm optimization, PSO) PSO 算法中,将鸟群的个体位置或食物当作优化问题的解,利用群体中个体与最优个体以及个体之间的信息交互,引…

粒子群算法

粒子群算法简介 粒子群算法,其全称为粒子群优化算法(Particle Swarm Optimization,PSO) 。它是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的搜索算法。粒子群算法属于启发式算法也叫智能优化算法,其基本思想在于通过群体中个体之间的协作和信息…

粒子群(PSO)算法的理解与应用

最近在学习粒子群算法,看了很多资料都有点摸不清头脑,直到看了一篇博客中超级简洁的粒子群C实现代码,才明白粒子群算法的原理,真心感谢博主,在此贴出博主的博客地址: http://blog.sina.com.cn/s/blog_4ed02…

6套粒子群算法(内含matlab代码)

粒子群算法(1)----粒子群算法简介 一、粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS)。CAS理论于1994年正式提出,CAS中的成员称为主体。比如研究鸟群系统,每个鸟在这个系统中就称为主体。主体有适…

粒子群算法(PSO)详解

1 粒子群PSO算法简介 1.1 维基百科的解释 粒子群算法(Particle Swarm Optimization,简称PSO),或称粒子群优化,是属于人工智能算法,公元1995年由肯尼迪(Kennedy)与埃伯哈特&#xf…

优化算法——粒子群算法(PSO)

一、粒子群算法的概述 粒子群算法(PSO)属于群智能算法的一种,是通过模拟鸟群捕食行为设计的。假设区域里就只有一块食物(即通常优化问题中所讲的最优解),鸟群的任务是找到这个食物源。鸟群在整个搜寻的过程中,通过相互…

粒子群算法(PSO) 介绍

算法理解 粒子群算法,又叫鸟群算法,可见是受鸟群捕食行为的启发。它属于遗传算法、群智算法。粒子群算法关注于粒子的两个属性:位置和速度。每个粒子在空间中单独搜寻,它们记得自己找到的过最优解,也知道整个粒子群当…

【优秀作业】粒子群算法

粒子群优化算法 一、概述 粒子群优化算法(Particle Swarm Optimization,PSO)的思想来源于对鸟捕食行为的模仿,最初,Reynolds.Heppner 等科学家研究的是鸟类飞行的美学和那些能使鸟群同时突然改变方向,分散…

Dex加固与反编译

编译与反编译 编译 将java代码转换为Dalvik字节码 将res资源文件、AndroidManifest.xml等配置文件编译为二进制文件 反编译 将DEX文件转换为jar包或者Smali文件 将二进制资源文件还原为资源源码文件 编译与反编译是相对的过程,转换过程分别由编译器和反编译器实…

编译与反编译

编译:高级语言转换成计算机认识的低级语言 编译的主要的目的是将便于人编写、阅读、维护的高级语言所写作的源代码程序,翻译为计算机能解读、运行的低级语言的程序,也就是可执行文件。 反编译:Java的反编译,一般是将…