复习Android之Service的AIDL传值

Android:AIDL简单介绍+传递简单数据+传递复杂数据 AIDL简单介绍+传递简单数据+传递复杂数据.AIDL的目的就是实现进程之间的通信,尤其是在涉及多进程并发情况下的进程间通信。可以将aidl理解为两个进程之间的桥梁,并制定规则,使其传输特定数据。 阅读详情
  1. Service的类型
    本片按地点划分种类
    在这里插入图片描述

  2. 开启关闭本地服务

public static void bindLocalService(Context context, ServiceConnection serviceConnection) {
        if (context == null || null == serviceConnection) {
            return;
        }
        //通过Intent指定服务端的服务名称和所在包,与远程Service进行绑定
        Intent intent = new Intent();
        intent.setClass(context, LocalService.class);
        Bundle bundle = new Bundle();
        bundle.putString("name", "张三");
        bundle.putString("age", "25");
        intent.putExtras(bundle);
        //绑定服务,传入intent和serviceConnection对象
        context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
 }

/**
     * 解绑服务
     *
     * @param context
     */
    public static void unBindLocalService(Context context, ServiceConnection serviceConnection) {
        if (context == null || null == serviceConnection) {
            return;
        }
        try {
            // 当需要多次调用doSomething()方法的时候,如果直接bindService是会报错的
            context.unbindService(serviceConnection);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  1. 开启关闭远程服务
/**
     * 绑定远程服务
     *
     * @param context
     * @param serviceConnection
     */

    public static void bindTheRemoteService(Context context, ServiceConnection serviceConnection) {
        if (context == null || null == serviceConnection) {
            return;
        }
        //通过Intent指定服务端的服务名称和所在包,与远程Service进行绑定
        Intent intent = new Intent();
        intent.setClass(context, TheRemoteService.class);
        Bundle bundle = new Bundle();
        bundle.putString("Fruitname", "苹果");
        bundle.putString("Fruitage", "今年");
        intent.putExtras(bundle);
        //绑定服务,传入intent和serviceConnection对象
        context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
    }

/**
     * 解绑远程服务
     *
     * @param context
     * @param serviceConnection
     */
    public static void unBindTheRemoteService(Context context, ServiceConnection serviceConnection) {
        if (context == null || null == serviceConnection) {
            return;
        }
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190401093115241.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dpdGh1Yl8zNDQwMjM1OA==,size_16,color_FFFFFF,t_70)        try {
            // 当需要多次调用doSomething()方法的时候,如果直接bindService是会报错的
            context.unbindService(serviceConnection);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

想要开启service还需要在manifest注册,这样你就可以开启service了。

  <!--本地 service-->
        <service android:name=".service.LocalService">
            <intent-filter>
                <action android:name=" com.aidl.myapplication.service.LocalService" />
            </intent-filter>
        </service>

        <!--远程 service-->
        <service android:name=".service.TheRemoteService"
            android:process=":FruitLive"
            android:exported="true">
            <intent-filter>
                <action android:name="c com.aidl.myapplication.service.TheRemoteService" />
            </intent-filter>
        </service>
private TheRemoteInterface theRemoteInterface;

    //创建ServiceConnection的匿名类
    ServiceConnection serviceTheRemoteConnection = new ServiceConnection() {
        //重写onServiceConnected()方法和onServiceDisconnected()方法


        //在Activity与Service建立关联时调用
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //使用BindInterface.Stub.asInterface()方法将传入的IBinder对象传换成了BindInterface对象
            theRemoteInterface = TheRemoteInterface.Stub.asInterface(service);
            try {
                //通过该对象调用在bindInterface文件中定义的接口方法,从而实现跨进程通信
                theRemoteInterface.registerCallback(new TheRemoteCallBack());
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }

        //在Activity与Service解除关联的时候调用
        @Override
        public void onServiceDisconnected(ComponentName name) {
            try {
                if (null != theRemoteInterface) {
                    theRemoteInterface.unRegisterCallback();
                }
            } catch (RemoteException e) {
                e.printStackTrace();
            }
            theRemoteInterface = null;
        }
    };

具体详情请参考demoService之AIDL的传值

在这里插入图片描述

/**
     * service回调
     */
    class TheRemoteCallBack extends com.aidl.myapplication.TheRemoteCallBack.Stub {
        @Override
        public void fruitCallBack(FruitBean mFruitBean) throws RemoteException {

            showFruitUserInfo(mFruitBean.getFruit1(), mFruitBean.getFruit2());
        }

    }
/**
     * activity传值service
     */
 class TheRemoteInterface extends com.aidl.myapplication.TheRemoteInterface.Stub {

        @Override
        public void registerCallback(TheRemoteCallBack callback) throws RemoteException {
            theRemoteCallBack = callback;
        }

        @Override
        public void unRegisterCallback() throws RemoteException {
            theRemoteCallBack = null;
        }
        @Override
        public void sendFruitMessage(String name) throws RemoteException {
            Log.e("sendFruitMessage", "sendFruitMessage name " + name);
        }

    }

在这里插入图片描述

Android复习资料——Android知识点汇总 (一) 接触 Android 开发也有一段时间了,前段时间便开始想抽空整理一些知识点,通过笔记整理的方式减少自己重复学习的时间成本和提高自身的效率。 目前先是总结了部分 Android 的知识点,这就是本文的主要分享内容。想特意申明的一点是,这个总结更多的是从本人自己的编程基础和侧重点出发,所以在内容上会有选择性的忽略以及侧重点,参考的博客和图文有很多,没办法一一列出,如果有引用不当的部分会立即删... 阅读详情

相关推荐

AIDL传递基础数据类型

AIDL远程调用,传递基础数据类型

Android AIDL Service 跨进程传递复杂数据

服务交互的方式有很多,广播、文件、接口都可以;但是假如服务处于独立进程中,并要求效率呢? 此时AIDL可以为你解决,但是AIDL中,默认传递的类型不多(String,Char,Int,Long,Bool...)但是如果传递一个User呢? 在AIDL跨进程的处理中并不允许之间传递一个类,而是需要把类进行序列号进行传递,而后再反序列化处理得到。 在本文中采用Parcelable方式完成复杂类型的传递~~

QiuJuer 6015

aidl.rar_AIDL_AIDL.rar_android AIDL service_android service_andr

android aidl service

Android AIDL的使用以及双向传输数据

Android Interface Definition Language,简称AIDL,是Android接口定义语言,用于进程间通信。当然你也可以通过发送广播达到进程间通信的目的,但广播会碰到延迟等现象,个人建议还是使用AIDL。 AIDL传输数据支持Java基本数据类型、List、Map以及实现Parcelable的类。接下来将通过一个实例来讲解下AIDL,并...

lhp1930的专栏 1855

非标准包 game.rgss3a 的打开方法 | 2023 年实测

生活笔记

陌雨’的博客 1万+

python——体育收入排行2012-2019

请分析文件并读取数据,完成以下功能: 1. 某年的收入排名前若干名选手 如果输入n是2012-19之间的年份,则可以输入整数k,输出n年的前k名排名信息。如果k大于当年排名运动员人数,则输出当年所有的信息。每行一名运动员信息,以' | '间隔该行各项信息。 2. 某年属于某个运动项目的所有运动员信息,和收入总和 如果输入的是'sport'(不区分大小写),则可以继续输入一个年份201*,输出一个当年排行中的运动项目菜单,按照字符串升序排列,格式见示例,再输入运动项目对应的数字来输出该项运动当

m0_62488776的博客 2258

android AIDL中数据的传输

上面已经了解了AIDL的通信原理,那么就有必要说一说通信过程的数据传输了。首先肯定支持基本类型的传送,比如char ,int,string,byte,等。它还可以传输的类型有map,list,charsequence,这几种,当然map和list中泛型的支持必须是前面的基本类型。在使用List的时候需要指明是in还是out,如图所示在客户端的时候也必须使用ArrayList来接收。 那如果我们想

xingshang_love的博客 3471

python爬取《你好, 李焕英》豆瓣评论数据

# 导入工具包 import requests from bs4 import BeautifulSoup import time import pandas as pd import numpy as np # 请求头 headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'} # =

python技巧分享 3457

android aidl空指针,AIDL使用笔记

最近这段时间在项目开发中使用到了AIDL,之前对这块的内容比较陌生.所以特地分享一下关于AIDL的一些使用知识,如果有什么写的不对的地方还请指出.这里先谢谢了!!!本文知识点:AIDL简介AIDL的一些简单说明AIDL的DEMO演示AIDL的进阶使用1. AIDL简介其实我平时很烦一下概念上的东西,但是有的时候面试会使用到,所以这里还是简单提一下吧!你只要记住"AIDL(Android 接口定义语...

weixin_39604045的博客 503

SAP Parallel Accounting(平行分类账业务)配置及操作手册【适用于多国家会计准则】

在SAP系统中,分类账(Ledger)是用于会计核算的核心概念,它允许企业根据不同的会计原则和货币进行财务记录。定义分类账是配置平行账(Parallel Accounting)的第一步。分类账的创建:通过事务代码OX18可以创建新的分类账。通常,一个SAP系统会有一个主分类账(如0L),它代表法定会计和实时传输至管理会计(CO)的账本。分类账属性:在创建分类账时,需要定义其属性,如会计年度变式、货币、会计原则等。这些属性将决定分类账的核算规则和适用性。

数字化2025 4619

手把手教你用VSCode+SDL在Ubuntu上跑LVGL8.2模拟器(附插件清单)

本文详细介绍了在Ubuntu系统上使用VSCode和SDL库搭建LVGL8.2模拟器环境的完整流程,特别适合嵌入式开发者(如全志F1C100s平台)进行UI设计验证。从环境配置、项目编译到VSCode深度集成,提供了实用技巧和常见问题解决方案,帮助开发者实现'先模拟后真机'的高效开发模式。

weixin_33737134的博客 358

Android AIDL使用步骤

前段时间项目总有用到AIDL,因为时间原因,没有及时记录下,今天想到这个突然感觉有点遗忘了,就又去复习了一波顺便记录下,方便下次查看,毕竟好记性不如烂笔头(滑稽)。 服务端: 1.在Android Studio中 src目录上右键创建一个AIDL文件 并命名,完成后会再main下自动生成一个aidl目录,该目录的包名和java下的包名是一致的。 创建完成后样式如下图所示: 每次生...

优快云_WZM的博客 1万+

【第三方互联】3、腾讯QQ授权第三方登录

当我们创建的 QQ 互联应用成功后,我们便可以开始使用该应用来实现 QQ 互联 一、获取 APP ID 和 APP Key 1、找到我的应用 2、点击应用,进入详情 这样,我们就获取到了 APP ID 和 APP Key 二、进行开发 1、将 APP ID 、APP Key,以及该应用的信息放入项目中的配置文件中,我使用的是SpringBoot,我放在了 application.y...

JACKAL 22万+

一个简单的demo学习Android远程Service(AIDL的使用)

这是milo很早之前写在论坛上的一个帖子,现在整理出来,milo也复习一下 一般来说Android 的四大组件都是运行在同一个进程中的,但远程Service运行在不同的进程里。这进程间的通信是使用了Android Binder机制。Android 中Service 有本地Service和远程Service之分,本地Service用法比较简单,而远程Service用法稍微要复杂一些。下面就是一个使

maokao8053的博客 254

【uniapp踩坑记】App Store上传失败:Invalid Swift Support错误怎么解决?

作为一个前端出身的开发者,用 uniapp 开发原生 App 已经够挑战了,打包 iOS 上传 App Store 更是处处暗雷。这次的坑虽然小,但确实容易忽略。如果你也遇到了类似的报错,希望这篇文章能帮你少踩一次坑!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1143

【基于 CasADi 的欠驱动无人船实时非线性模型预测控制(NMPC)实现 Visual Studio 2022 C++】

本文介绍了基于CasADi和IPOPT在Visual Studio 2022 C++环境下实现的欠驱动无人船实时非线性模型预测控制(NMPC)方案。文章详细阐述了NMPC基本原理、欠驱动无人船动力学模型(包含状态变量和控制变量定义),并给出了C++实现的核心代码框架。该方案通过显式引入系统动力学模型和约束条件,在每个采样周期滚动优化控制序列,有效解决了欠驱动无人船的轨迹跟踪与避碰问题。文中还提供了VS2022配置CasADi环境的详细步骤,包括预编译包下载、工程属性设置等关键环节,为工程实现提供了完整的技术

vor234的博客 653

Android AIDL的总结与介绍

PS:按照惯例,在这闲扯一下个人选择和游戏吧,其实当时博主也收到过游戏公司的Offer,算是个还行的公司吧,还有电信。哈哈然而当时(15年)太喜欢玩了,一找到工作就直接签了,而且是选择了去惠州而不是深圳。搞的所有人都对我惊讶和奇怪。其实,我觉得如果一个人能够有足够的钻研精神,较高的学习效率,剩下的就关乎个人选择了。其实前两年在哪都一样,当时我甚至有去小公司的想法,累一点但进步快。再说游戏吧,除了女生

梦江月 681

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Android Service通信详解

本文旨在归纳所有与Service通信需要用到的所有技术。有:直接使用IBinder对象通信;使用Messenger实现通信;AIDL和使用广播方式

Yetwish的专栏 1879

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android复习之AIDL

1.AIDL的基本作用: AIDL是Android中IPC方式中的一种,AIDL是Android Interface definition language的缩写,它的作用就是用来和绑定其他应用的service来实现两个应用之间的通讯 2.服务端主要实现以下几个步骤 a.创建aidl文件,as会自动给你生成一个列子 b.编写服务端代码,在aidl文件中编写代码getName(),并且rebuild一下 c.编写提供方法的Service,并且在AndroidManifest中...

guanyueliuxing的博客 185

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android Service AIDL的学习,传递对象

Android Service AIDL的学习,传递对象Service有两种: 1,本地服务(Local Service):用于应用程序内部 2,远程服务(Remote Service):用于android系统内部的应用程序之间 。 使用区别: 本地服务:主要是平时做一些耗时,或者要长时间运行,影响UI线程的时候到到。如,播放音乐,下载等。 远程服务:则用于多应用之间的相互访问。比如做

lhmin5200的博客 519

Android Studio下AIDL的使用方法

现在是2019年10月28日,最新的Android Studio中,AIDL的用法变了,本文所介绍的方法已行不通,请勿再参考,我将抽空更新一篇最新用法的博客。 过去Android开发工具主要是Eclipse,那时使用AIDL记得挺简单的,这几天找工作复习AIDL,发现在Android Studio上按照书上的做法根本跑不通,又在网上找办法,全他妈的抄来抄去,虽然有图有文看上去一目了然,实际根本...

月笼寒沙 1063

Android期末复习篇_8章节练习题附答案

说明 Android移动应用开发章节练习题,注意 此答案并非标准答案,仅供期末复习参考。 加粗题目为强调题目 目录 第一章-安卓基础入门 第二章-安卓常见页面布局 第三章-安卓常见页面控件 第四章-安卓程序活动单元Activity 第五章-安卓数据存储 第六章-内容提供者 第七章-广播 一、第一章-安卓基础入门 Android安装包文件简称APK,其后缀名是(A) • A、apk • B、exe • C、txt • D、app Android 工程中存放各种程序资源的目录是(C) • A、src

xiaosi的博客 1万+

android进程通信之 AIDL 的使用

https://blog.youkuaiyun.com/u011240877/article/details/72765136 作者: 拭心 读完本文你将了解: AIDL 是什么 AIDL 支持的数据类型 AIDL 如何编写 AIDL 实例 创建 AIDL 编写服务端代码 编写客户端代码 运行结果 总结 代码地址 Thanks 记得 2015 年实习面试,笔试题里就有这道题:请介绍下 AIDL。 当时的...

胖子坚的博客 187

android aidl及binder基础知识总结

binder是android framework提供的,用于跨进程方法调用的机制,具有安全高效等特点。我们知道,在 Android 系统中,每个应用程序都运行在一个独立的进程中,各个进程之间需要进行数据交换和调用,以实现各种功能。为了实现这个目的,binder应运而生。1、一个类要想序列化就要实现Serializable或Parcelable接口,同理一个类要想提供跨进程服务,就必须继承binder类。binder就像一个标记类一样,只要继承了,就有资格在进程间通信了。

wh义华的专栏 1249

一个简单的demo学习Android远程Service(AIDL的使用

一个简单的demo学习Android远程Service(AIDL的使用) 作者:milo发布:2012-08-28 13:01分类:潜技术阅读:2,185次评论:1条评论 这是milo很早之前写在论坛上的一个帖子,现在整理出来,milo也复习一下 一般来说Android 的四大组件都是运行在同一个进程中的,但远程Service运行在不同的进程里。这进程间的通信是使用了Android Bind

u012547790的专栏 752
上一篇: 复习Android之Service的一种情怀
下一篇: 线程知识巩固第一节
jhonjson
博客等级 码龄11年 220粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值