首页 > 其他分享 >android Service和activity通信

android Service和activity通信

时间:2024-05-02 21:55:56浏览次数:25  
标签:Service void bound MyService activity android LocalBinder public

 

在Android中,Service和Activity可以通过多种方式进行通信。以下是一个简单的例子,展示了如何使用IntentBinderInterface来实现Service和Activity之间的通信。

首先,定义一个Service并创建一个绑定器类(Binder):

 

public class MyService extends Service {
    private final LocalBinder binder = new LocalBinder();
 
    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }
 
    public class LocalBinder extends Binder {
        MyService getService() {
            return MyService.this;
        }
    }
 
    public void serviceMethod() {
        // 示例方法
    }
}

 

然后,在Activity中绑定Service并调用Service的方法:

 
public class MainActivity extends AppCompatActivity {
    private MyService myService;
    private boolean bound = false;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Intent intent = new Intent(this, MyService.class);
        bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
    }
 
    private ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            MyService.LocalBinder binder = (MyService.LocalBinder) service;
            myService = binder.getService();
            bound = true;
        }
 
        @Override
        public void onServiceDisconnected(ComponentName name) {
            bound = false;
        }
    };
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (bound) {
            unbindService(serviceConnection);
            bound = false;
        }
    }
 
    public void callServiceMethod(View view) {
        if (bound) {
            myService.serviceMethod();
        }
    }
}

 

 

在这个例子中,MainActivity通过调用bindService()方法绑定到MyService。在ServiceConnectiononServiceConnected()回调中,它通过传递的IBinder获取MyService的实例,并可以调用MyService中定义的公开方法。当MainActivity不再需要与Service通信时,它调用unbindService()以解除绑定。

 

 

##########################

标签:Service,void,bound,MyService,activity,android,LocalBinder,public
From: https://www.cnblogs.com/herd/p/18119547

相关文章

  • Field registration in org.springframework.cloud.client.serviceregistry.ServiceRe
    Fieldregistrationinorg.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration$ServiceRegistryEndpointConfigurationrequiredasinglebean,but2werefound: -nacosRegistration:definedbymethod'nacosRegistration'in......
  • webapi创建和调用WebService
    首先需要引入soapcore包这个包提供了所需的类和soap终结点中间件。引入这个这个包之后,我们需要定义提供的服务。这里我写了一个用于查询省份面积的服务。省份信息服务///<summary>///省份信息服务接口///</summary>[ServiceContract]publicinterfaceIProvinceInfo......
  • android 反编译APK取源代码。
    坑,自己写的AndroidAPK程序,发现线上版本是1.9.4,本地的代码版本却是1.9.1。不知道到底怎么回事,svn里面也没有日志记录。。。。。只能从线上apk反编译来看看了,幸好这个升级日志里面,更新内容很少。。。。。真的是诡异 反编译过程如下,其他地方转来的,仅做记录用,方便自己以后按这......
  • test_django_service_post
    """@Name:test_django_service_01.py@Author:zengchuanyin@Date2024/2/25-10:56"""importpytestimportloggingimportjsonfromconfigimportget_env_msgfromservice.console.djangoservice_post_consoleimportDjangoServicePostfrom......
  • k8s的Service详解
    一、Service基本了解Service存在的意义?引入Service主要是解决Pod的动态变化,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上。若提供服务的容器应用是分布式,所以存在多个pod副本,而Pod副本......
  • 【Android】Binder的Oneway拦截
    在某些虚拟化,免安装,打点,环境检测,拦截器等场景,针对Android系统服务接口的拦截是常用的技术方案。通常只是针对正向的接口调用,如果涉及被动的服务回调拦截,则实现起来就有些许麻烦。说明由于我们容器产品的特性,需要将应用完整的运行起来,所以必须要对各系统服务(超过100+系统服务)......
  • Mysql启动报错:Job for mysqld.service failed because the control process exited wi
      该方法会删除mysql数据,慎用centos7上使用yum安装mysql后,启动报错[root@localhost~]#systemctlstartmysqldJobformysqld.servicefailedbecausethecontrolprocessexitedwitherrorcode.See"systemctlstatusmysqld.service"and"journalctl-xe"for......
  • [FBCTF2019]RCEService
    [FBCTF2019]RCEService打开环境,提示输入JSON格式输入{"cmd":"ls"},只有一个index,php,而且不能读取到这卡住了,找了师傅们的WP发现源码<?phpputenv('PATH=/home/rceservice/jail');if(isset($_REQUEST['cmd'])){$json=$_REQUEST['cmd'];......
  • reactivity api
    reactivityapi:https://v3.vuejs.org/api/reactivity-api获取响应式数据API传入返回备注reactiveplain-object对象代理深度代理对象中的所有成员readonlyplain-objectorproxy对象代理只能读取代理对象中的成员,不可修改refany{value:...}对va......
  • Android 系统编译
    一、流程根目录下的Makefile--->build/core/main.mk---->build/core/Makefile1.1根目录下的Makefile###DONOTEDITTHISFILE###includebuild/core/main.mk###DONOTEDITTHISFILE###1.2main.mk.PHONY:droidcoredroidcore:kernelimage\......