【Android】安卓闪电复习
Intent
An intent is an abstract description of an operation to be performed
一个Intent就是一次对将要执行的操作的抽象描述。
使用Service的方式
Started
startService():调用者和服务之间没有联系,即使调用者退出了,服务仍然进行 [onCreate()-->onStart()-->startService()-onDestory()]
Bound
bindService():调用者和服务绑在一起,调用者一旦退出服务也就终止[onCreate()-->onBind()-->onUnbind()-->onDestory()]
通过startService()使用Servic
编写类继承Service或其子类
复写方法
onStartCommand() onBind() onCreate() onDestroy()
在manifest文件中声服务
<service android:name=".Service" />
启动服务
关闭服务
什么是Bound Services
Bound service 允许其它的组件(比如Activities)绑定到这个Service上,可以发送请求,也可以接受请求,甚至进行进程间的通话。
Bound service 仅仅在服务于其它组件时存在,不能独自无限期的在后台运行。
创建Bound Services
当创建一个能提供绑定功能的服务时,我们必须提供一个IBinder对象,客户端能使用这个对象与服务进行交互。
在Android中有三种方式定义方式:
1.扩展Binder类
2.使用Messenger
3.使用AIDL (Android Interface Definition Language)
通过扩展Binder类创建Bound Services
步骤:
a.在Service类中,创建一个Binder实例
包含客户端能调用的公共方法
返回当前服务对象
b.在onBind()方法中返回Binder实例
c.在客户端,从onServiceConnected()方法中获得Binder实例,
MessageQueue
消息队列,存放消息的地方,按照FIFO规则执行,每一个线程只可以拥有一个MessageQueue。在创建Looper对象会创建一个MessageQueue对象。
Message
消息对象,MessageQueue中存放的对象。
一个MessageQueue中可以包含多个Message对象。可以通过Message.obtain()或者Handler.obtainMessage()获取Message对象。但是这并不一定是直接创建一个新的实例,而是先从消息池中看有没有可用的Message实例,存在则直接取出返回这个实例。如果消息池中没有可用的Message实例,则才用给定的参数创建一个Message对象。
调用removeMessages()时,将Message从MessageQueue中删除,同时放入到消息池中。
Looper
操作MessageQueue。
一个Looper对应一个MessageQueue。通过调用Looper.myLooper()可以获得当前线程的Looper对象。
Looper从MessageQueue中取出Message然后,交由Handler的handleMessage()进行处理。处理完成后,调用Message.recycle()将其放入消息池中。
Handler
消息的处理者。
handler负责将需要传递的信息封装成 Message对象,然后调用sendMessage()方法将消息放入MessageQueue中。
当MessageQueue循环到该Message,调用相应的handler对象的handleMessage()方法对其进行处理。Handler都可以共享同一Looper和MessageQueue。
Status Bar Notifications
status bar notification添加一个icon到系统的状态栏中(可选择是否有文本信息),添加一段信息到"Notifications" 窗口中。
当在后台运行的服务需要与用户进行交互时我们可以使用status bar notification。
创建notification
Notification
NotificationManager
Broadcast Receiver
广播接收器,它和事件处理机制类似,只不过事件处理机制是程序组件级别,而广播事件处理机制是系统级别。
使用Broadcast Receiver
1.编写类继承BroadcaseReceiver,复写onReceiver()方法
2.在AndroidManifest.xml文件中注册BroadcaseReceiver
3.构建Intent对象
4.调用sendBroadcase()方法发送广播
BroadcaseReceiver生命周期
BroadcastReceiver对象仅在调用onReceive()方法时有效,当该方法执行完毕后,系统认为销毁该对象。
注册Broadcast Receiver的方法
- 在AndroidManifest.xml文件中进行注册
- 在应用程序的代码中进行注册
在应用程序的代码中进行注册
- 注册BroadcastReceiver
- registerReceiver()
- 取消注册BroadcastReceiver
- unregisterReceiver()
Android数据存储方式
- SQLite数据库
- 文件
- Shared Preferences
- 内容提供者(Content Providers)
- 网络
SQLite数据类型
一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。
SQLite具有以下五种数据类型:
1.NULL:空值。
2.INTEGER:带符号的整型,具体取决有存入数字的范围大小。
3.REAL:浮点数字,存储为8-byte IEEE浮点数。
4.TEXT:字符串文本。
5.BLOB:二进制对象。
基本SQL命令
create insert update select delete order by group by having limit
文件操作两个方法
1.openFileOutput (String name, int mode)
name:文件的名称,不能包含分隔符"/",如果文件不存在,Android会自动创建它。创建的文件保存在/data/data/<package_name>/files目录下。
mode:操作模式
2.openFileInput (String name)
Mode
MODE_APPEND
如果文件中已经存在内容,则在内容末尾追加
MODE_PRIVATE
文件仅能被该程序访问
MODE_WORLD_READABLE
文件允许被其它应用程序读
MODE_WORLD_WRITEABLE
文件允许被其它应用程序写
MODE_WORLD_READABLE + MODE_WORLD_WRITEABLE
Content Providers
Content Providers 是所有应用程序之间数据存储和检索的一个桥梁,作用是使得各个应用程序之间实现数据共享。
它是应用程序间共享数据的唯一方法。在Android中没有一块公共的所有应用程序都能访问的数据存储地方。
URI
每个content provider有一个公有URI, 该URI用于识别它所代表的数据集合。 所有的content provider的URI以字符串"content://"开始.
Content Providers可以做什么
1.query() 2.insert() 3.update() 4.delete() 5.getType()
前提条件
存在一个用于存放数据的系统
实现步骤
1.定义一个继承 ContentProvider的类
2.声明一个Uri类型的常量CONTENT_URI
3.实现query()、insert()、update()、delete()、getType()、onCreate()
4.在AndroidManifest.xml文件中进行声明
GET请求方式
GET方式:通过把参数键值对附加在url后面来传递的。在服务器端可以直接读取,效率较高,但缺乏安全性,也无法来处理复杂的数据,长度有限制。
主要用于传递简单的参数。
POST请求方式
POST方式:就传输方式讲参数会被打包在http报头中传输,可以是二进制的。便于传送较大一些的数据,同时因为不暴露数据在浏览器的地址栏中,安全性相对较高,但这样的处理效率会受到影响。
TabWidget控件
TabWidget通过多个标签切换显示不同的内容。
要实现这一效果,我们需先了解TabHost,它是一个存放多个Tab标签的容器。每个Tab都可以对应自己的布局。
通知用户的三种方式
- Toast Notification
- Dialog Notification
- Status Bar Notification
创建Status Bar Notifications
Notification
定义Status Bar的属性,比如图标、显示文本等。
NotificationManager
NotificationManager是Android系统服务,用来执行和控制所有的Notifications
Status Bar Notifications特殊效果
铃声
震动
闪光
PendingIntent和Intent的区别
Intent 表示一个目的,第一个参数表示所在类,第二个参数表示目标类
PendingIntent即是一个Intent的描述
PendingIntent和Intent的区别:
PendingIntent就是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情。
换种说法Intent字面意思是意图,即我们的目的,我们想要做的事情,在Activity中,我们可以立即执行它,PendingIntent相当于对Intent执行了包装,我们不一定要马上执行它,我们将其包装后,传递给其他Activity或Application。这时,获取到PendingIntent的Application 能够根据里面的Intent来得知发出者的意图,选择拦击或者继续传递或者执行。
Menu
- Options menus
- Sub menus
- Context menus
转载于:https://www.cnblogs.com/lcw/p/3342914.html
【Android】安卓闪电复习相关推荐
- android imap开发,企业邮箱在Android(安卓)系统手机上POP3/IMAP协议如何设置
企业邮箱在Android(安卓)系统手机上POP3/IMAP协议如何设置 我们已经推出了自己研制的手机客户端,具备高兼容性,不需需配置,输入企业邮箱地址和密码直接登录使用.了解详情> 直接扫码下 ...
- android设备如何苹果,Android安卓设备如何连接Mac的方法
Android安卓设备如何连接Mac的方法 本篇文章主要给大家总结了安卓设备连接MAC电脑的方法以及中间遇到连接问题以后的处理办法. 平时大家用到最多的就是安卓手机和苹果电脑互连,由于安卓系统应用广泛 ...
- Linux基础——怎么样从手机 (Android安卓/IOS苹果) 通过 SSH 远程 Linux
文章目录 1.前言 2.给 Linux 安装 OpenSSH 3.手机 SSH 的 app 1.前言 如果有时候身边没有第二台电脑, 我们完全可以用一台手机来控制你的 Linux. 不管是 iPhon ...
- Android安卓拖拉机版Docker
Android安卓拖拉机版Docker 为什么说是拖拉机,因为性能真的狠拖拉机- 各种嵌套安装才能垃起docker termux → qemu → alpine linux → docker 一:安装 ...
- Android安卓手机版火狐浏览器设置简洁主页
Android安卓手机版火狐浏览器设置简洁主页 以下内容全部为本人原创.测试过,非网络复制粘贴文本. 写作时间:2018年9月 安卓系统版本:8.1.0 手机品牌:华为 Firefox版本:62.0. ...
- Android安卓-UI自动打卡Appium+PO+Pytest(1)
Android安卓-UI自动打卡Appium+PO+Pytest 背景 环境配置 pytest初始化设置 封装驱动 建立测试用例 test_open.py 建立对应用例的页面对象文件PO open_p ...
- android 动画 最顶层_【尼康影像学院】使用SnapBridge连接照相机与智能手机(Android安卓系统)...
通过视频为您介绍尼康相机使用SnapBridge连接照相机与智能手机的顺序. 支持的数码照相机 支持Wi-Fi直连:Z 7, Z 6, Z 50, D850, D780, D500, D7500, D ...
- EasyRTMP Android安卓手机直播推流摄像头偏暗的问题解决
在我们测试EasyRTMP Android安卓手机推流的过程中发现有些设备预览时,明显偏暗!在稍微暗点的环境中几乎很难看清东西-额,这是怎么回事呢?又是安卓设备的兼容性问题,头疼! !!!好吧,停止抱 ...
- 【Windows 11】系统安装修改版 Subsystem for Android 安卓子系统,并用 Magisk Root
目录 步骤 1. 卸载已安装的Window Subsystem for Android 官方版本 2. 启用"Hyper-V" 和 "虚拟机平台" 3. 查看 ...
- Android安卓成品项目 购物商城系统源码apk
Android安卓成品项目 购物商城系统源码apk 安卓源码,成品项目,单机不联网项目,包含项目报告 登录注册,展示和修改个人信息,全部商家列表,讨论功能,添加购物车,联系,付款,查看订单记录,账户充 ...
最新文章
- AttributeError: module 'tensorflow' has no attribute 'random_normal'
- SAP WMS Posts
- 18.12.09-C语言练习:兔子繁衍问题 / Fibonacci 数列
- 读入的字节都写入字节数组中_使用Java将文件读入字节数组的7个示例
- 剑指Offer - 翻转单词顺序列
- PHP实现今天是星期几的几种写法
- 微信小程序左右菜单mysql_微信小程序tab左右滑动切换功能的实现代码
- .net ajax 保存文件,.net ajax式上传文件
- linux java7 64位_linux jdk1.7 64位tar.gz下载安装配置教程(完美版)
- 2021 年前端宝典【超三百篇】
- 《JavaScript DOM编程艺术》知识整理
- PHP之字符串常用函数
- 菲尼克斯电源模块的安装
- 支持中文编程、汉语编程的国产C语言编程工具 - 习语言4717版发布
- centos7.5安装mysql数据库_CentOS7.5安装Mysql5.7.22
- numpy 之average
- 对称加密php,PHP实现对称加密与解密
- uni-app 微信小程序启用组件按需注入
- 串口编程DCB结构体参数配置详细说明
- 高维内积的数学符号括弧
热门文章
- 南昌项目中镜像系统时遇到的问题
- UBUNTU使用五笔98输入法
- 从盆景与景观看中西文化差异
- 看了有多个人格的人,自己拍的视频
- 错误解决办法:zipimport.ZipImportError: can't decompress data; zlib not available
- 播放视频时有残影、水纹的原因
- python中把输出结果写到一个文件中_python 文件中字符串过滤,并将结果输出到另一个文件中(源码)...
- php 5.2 spl_autoload_register,PHP 中的__autoload() 与spl_autoload_register()函数
- matlab中TCR触发,TCR+FC型SVC的研究及MATLAB仿真
- python函数传递列表_python传递列表作为函数参数