Android——bindService()方法启动服务

article/2025/10/1 8:17:37

通过绑定服务来启动的话需要注意创建一个类来实现ServiceConnection接口,重写onServiceConnected()和onServiceDisconnected()方法。这个类用于服务的连接。成功绑定服务时,会调用onServiceConnected()方法,在这个方法里面来获取IBinder对象。当服务解绑的时候调用onServiceDisconnected(),这个方法不用写啥操作。

在服务类里面创建一个内部类,继承Binder类,作为服务的代理,调用 服务中的方法。

服务中的onBind()方法返回的是代理的对象。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg"><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/btn_bind"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="250dp"android:layout_marginTop="250dp"android:background="#F5F5DC"android:text="绑定服务" /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/btn_invoke"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/btn_bind"android:layout_alignLeft="@+id/btn_bind"android:layout_marginTop="100dp"android:background="#F5F5DC"android:padding="10dp"android:text="调用服务中的方法" /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/btn_unbind"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/btn_invoke"android:layout_alignLeft="@+id/btn_bind"android:layout_marginTop="100dp"android:background="#F5F5DC"android:padding="10dp"android:text="解绑服务" /></RelativeLayout>

MainActivity.java 

package com.example.bindservice;import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;public class MainActivity extends AppCompatActivity implements View.OnClickListener {AppCompatButton bind,invoke,unbind;MyService.MyBinder myBinder;MyConnection myConnection;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();bind.setOnClickListener(this);invoke.setOnClickListener(this);unbind.setOnClickListener(this);}private void init(){bind=findViewById(R.id.btn_bind);invoke=findViewById(R.id.btn_invoke);unbind=findViewById(R.id.btn_unbind);}@Overridepublic void onClick(View view) {switch (view.getId()){case R.id.btn_bind:if(myConnection==null){myConnection=new MyConnection();}Intent intent=new Intent(MainActivity.this,MyService.class);bindService(intent,myConnection,BIND_AUTO_CREATE);break;case R.id.btn_invoke:myBinder.callMethodInService();break;case R.id.btn_unbind:if (myConnection!=null) {unbindService(myConnection);myConnection=null;}}}class MyConnection implements ServiceConnection{@Overridepublic void onServiceConnected(ComponentName componentName, IBinder iBinder) {myBinder=(MyService.MyBinder)iBinder;Log.i("MyActivity","服务成功绑定,内存地址为:"+myBinder.toString());}@Overridepublic void onServiceDisconnected(ComponentName componentName) {}}
}

MyService.java

package com.example.bindservice;import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;public class MyService extends Service {public MyService() {}@Overridepublic IBinder onBind(Intent intent) {Log.i("service","绑定服务,执行onBind方法。");return new MyBinder();}@Overridepublic void onCreate() {super.onCreate();Log.i("service","创建服务,执行onCreate方法。");}@Overridepublic boolean onUnbind(Intent intent) {Log.i("service","解绑服务,执行onUnbind方法。");return super.onUnbind(intent);}class MyBinder extends Binder{public void callMethodInService(){methodInService();}}public void methodInService(){Log.i("service","调用服务内的方法。");}
}

运行结果:

1.点击绑定服务按钮,控制台上输出:

 可见绑定完成后调用了onServiceConnected()方法,使全局变量

MyService.MyBinder myBinder;

这个代理对象绑定了onBind()方法返回的IBinder对象。然后才能成功调用服务中的函数。

2.点击调用服务中的方法按钮,执行服务中的方法。

3.点击解绑服务按钮,调用unbindService()方法(方法内部参数是连接类的对象),解绑服务。同时调用服务生命周期中的onUnbind()方法,可以在控制台输出。


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

相关文章

Android Service 服务(三)—— bindService与remoteService

一、bindService简介 bindService是绑定Service服务&#xff0c;执行service服务中的逻辑流程。 service通过Context.startService()方法开始&#xff0c;通过Context.stopService()方法停止&#xff1b;也可以通过Service.stopSelf()方法或者Service.stopSelfResult()方法来停…

SO_BINDTODEVICE 使用

就绑定到了接口"lmi40"上,所有数据报的收发都只经过这个网卡. 对于SOL_BINDTODEVICE的总结如下: &#xff08;1&#xff09; 对于TCP套接口、UDP套接口、RAW套接口&#xff0c;可以通过SO_BINDTODEVICE套接口选项将套接口绑定到指定的网络接口上。绑定之后&…

startService与bindService的区别

Android执行Service有两种方法&#xff0c;一种是startService&#xff0c;一种是bindService。下面让我们一起来聊一聊这两种执行Service方法的区别。 1、生命周期上的区别 执行startService时&#xff0c;Service会经历onCreate->onStartCommand。当执行stopService时&…

startService和bindService的区别

首先看下其生命周期的区别&#xff1a; 生命周期&#xff1a; onCreate → startCommand → onDestroy onCreate → onBind→onUnBind→ onDestroy 静态绑定对应着startService&#xff1b;动态绑定对应着bindService&#xff0c;静态有自己独立的生命周期&#xff0c;动态会…

bindService的使用

bindService与starService之间的区别&#xff1a; 在程序通过startService&#xff08;&#xff09;方法启动的服务&#xff0c;会长期在后台运行&#xff0c;并且启动服务的组件与服务之间没有关系&#xff0c;即使启动服务的组件被销毁&#xff0c;服务还是会运行。 但是当一…

Service学习以及BindService的使用

Service 什么是Service Service是一个可以在后台执行长时间操作而不使用用户界面的应用组件。 如何使用Service 我们首先需要实现一个Service的子类。主要实现Service的onCreat&#xff08;&#xff09;&#xff0c;onStartCommand&#xff08;&#xff09;&#xff0c;onB…

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

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

粒子群算法笔记

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

粒子群算法及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&#xff0c;PSO)由Kennedy和Eberhart在1995年提出&#xff0c;该算法对于Hepper的模拟鸟群(鱼群)的模型进行修正&#xff0c;以使粒子能够飞向解空间&#xff0c;并在最好解处降落&#xff0c;从而得到了粒子群优化算法。…

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

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

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

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

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

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

粒子群算法(2)

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

粒子群算法简介

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

粒子群算法(1)

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

粒子群优化算法

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

粒子群算法

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

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

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

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

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