在上篇文章以线程间的通信方式Handler类结尾,服务Service还支持的进程间通信,又是具体怎么实现的呢?这就要用到加载服务一文中提到的AIDL语言规范了. AIDL是 Android Interface Definition Language 的缩写,即Android接口定义语言,使用其定义的规范编程,可实现Android系统上不同进程间的通信.官网ADIL概述中以服务端和客户端通信为例做了大致讲述.与线程间的通信类似,不同进程间的通信也是分为通信消息内容.消息发送方.消息接收方三个部分的…
在上篇文章中初步了解了Android系统的四大组件之一的服务Service,在服务内可以执行无用户交互的耗时操作任务,但是包括之前关于界面系列文章在内,生命周期方法都是在主线程内被系统回调的.如果直接在生命周期方法中执行耗时操作,同样可能会在主线程5s内无响应而触发系统对应用程序的ANR异常.为了解决这个问题,就需要使用多线程开发来执行耗时任务,在任务执行结束后将结果返回到主线程中响应. 什么是线程呢?每个应用程序在初始化时,默认运行在以其包名命名的进程中,同一进程中的内存是可以共享使用的.而每…
在前边几篇关于Android系统两个重要组件的介绍中,界面Activity负责应用程序与用户的交互,服务Service负责应用程序内部线程间的交互或两个应用程序进程之间的数据交互.看上去这两大组件就能满足日常应用程序的开发需求了,可是应用程序之间的交互,如果都使用服务Service中的AIDL规范,那每个应用程序本身岂不是要声明其他应用程序中的一些接口?这对两个属于不同开发者的应用程序来说很不友好.所以Android系统还提供了称为广播接收者BoradcastReceiver的组件,采用广播机制…
上回说到应用初始化加载及其生命周期,在Android系统调用Applicaiton.onCreate()之后,继续创建并加载清单文件中注册的首个界面即主Activity,也可称之为入口界面.主Activity的确定规则在Android系统编程入门系列之清单文件有介绍,本文主要介绍Android系统创建Activity之后的生命周期流程. 在清单文件中所注册的界面均为自定义Activity,其父类往上追溯,必须继承自android.content.Activity. 生命周期 Activity作为…
之前几篇文章简单梳理了在Android系统的四大组件之一,最主要的界面Activity中,使应用程序与用户进行交互响应的相关知识点,那对于应用程序中不需要与用户交互的逻辑,又要用到哪些内容呢?本文开始将介绍应用程序无需界面交互的内部交互相关知识点,首先从另外一个四大组件之一的服务Service开始. 在清单文件一文的组件声明中,已经知道服务Service与界面Activity一样,都要在清单文件中注册声明.同样的,每个注册声明的服务Service类向上追溯都必须继承自android.app.Se…
通信硬件NFC的文章,虽然可以在Android系统中通过非直接接触的形式与支持NFC硬件的设备通信,但是也只能交互一些简短的标签内容,对大量的持续性数据,却并不能很好的支持.因此针对这个弊端,可以考虑使用支持Bluetooth技术的硬件. Android系统支持传统的Bluetooth技术,其实现功能不仅可以传输数据,还可以传输并执行远程控制指令.在Android4.3 即API 18 及以后的版本中,低功耗的Bluetooth技术(简称为BLE)取自传统Bluetooth的核心功能,可以更省功…
    作为移动端操作系统,目前最新的Android 11.0已经发展的比较完善了,现在也到了系统的整理一番的时间,接下来的系列文章将以Android开发者为中心,争取用归纳总结的态度对初级入门者所应掌握的基础知识聊以标记. 应用环境     Android系统是Google基于Linux系统开发的一套移动系统,不仅应用于手机,还有穿戴设备,TV大屏设备等多种移动场景,其优势是使得硬件具有人性化的界面(Activity),并行的服务(Service),高效的数据存储(ContentProvide…
内容提供者ContentProvider与前文的界面Activity.服务Service.广播接收者BroadcastReveiver,并列称为Android的四大组件,均是需要自定义子类继承上述组件类,并在清单文件中静态注册或逻辑代码中动态注册才能正常使用. android.content.ContentProvider内容提供者类,是用来对其他应用程序提供分享数据内容的组件类,在应用程序间的文件共享一文中,针对Android7.0以上版本所注册的FileProvider文件提供者,便是已经定…
在上一篇文章中已经提到,Android系统加载应用程序之后,首先会读取该应用程序的AndroidManifest.xml清单文件,之后根据该清单文件加载后边的东西.所以要开发应用程序,自然要先知道清单文件中都记录了什么东西.一般地,在清单文件中声明定义的内容,称为静态注册,相对应地,可以在代码中定义的内容,称为动态注册. 清单文件的存储位置就是应用程序的根目录,而且文件名也是固定的,必须为AndroidManifest.xml,清单文件中所包含的内容在Android官网应用清单文件中可查.其中的…
在应用程序间及与用户的通信交互过程中,会产生并传递一系列数据.针对这些数据,有部分是只在应用程序中使用的缓存数据,还有一部分是在不同位置多次或长时间使用的持久化数据. 对于缓存数据来说,通常以代码中定义局部变量或全局变量的方式访问使用,这种使用方式伴随在编程的整个过程中:而持久化数据,则需要以特定的文件格式保存在系统硬盘中,使用系统提供的框架方法来访问使用.而根据要持久化保存数据的复杂程度不同,分别有轻量级SharedPreferences,数据库SQLiteOpenHelper或其封装的Roo…