【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
【Android】安卓闪电复习的更多相关文章
- Android安卓身份证识别SDK
一.Android安卓身份证识别SDK应用背景 这些年,随着互联网金融的极速发展,第三方支付.理财.P2P网贷.征信等APP应用成爆发式的增长,在众多APP中都涉及到对身份证信息的录入,如第三方支付. ...
- android安卓生成密钥keystore(命令控制)
android安卓生成密钥keystore(命令控制) • 配置JDK 详细教程 https://blog.csdn.net/u012934325/article/details/73441617/ ...
- Android安卓手机游戏开发
成都传智播客Java培训,免费学Android安卓手机游戏开发,安卓android开发课程包括Android安卓应用开发和Android安卓游戏开发两个方向,可是偏向游戏开发. 依据"199 ...
- EasyRTMP Android安卓手机直播推流摄像头偏暗的问题解决
在我们测试EasyRTMP Android安卓手机推流的过程中发现有些设备预览时,明显偏暗!在稍微暗点的环境中几乎很难看清东西-额,这是怎么回事呢?又是安卓设备的兼容性问题,头疼! !!!好吧,停止抱 ...
- EasyCamera Android安卓移动视频监控单兵设备接入EasyDarwin开源流媒体云平台
前言 随着Android系统的不断更新和发展,现在越来越多的硬件产品选择用安卓系统作为运行环境,电视机,机顶盒.门禁.行车记录仪.车载系统.单兵设备等等,Android系统底层还是Linux,但对上层 ...
- lighttpd + php for android 安卓上的WEB服务器
lighttpd + php for android 安卓上的WEBSER 这个项目在 http://hex.ro/wp/blog/php-and-lighttpd-for-android 目前不支持 ...
- 微信4.5 for Android安卓内测版体验【实时对讲】杀手级应用下载
微信4.5 for Android 安卓 内测版 体验 程序启动画面,是一支在动的烛光 主要功能更新如下 支持语音提醒,到时间后自动弹出消息框 发起语音提醒请求 成功识别语音请求,并且保存在本地,应该 ...
- 如何在 Android 安卓手机上运行 Node.js 应用 | 如何在安卓手机配置node开发环境
最近在学习js,由于没法随身携带笔记本电脑,在手机翻阅<JavaScript高级程序设计>时,时常想调试一下书中的代码.于是就有了,能否在手机上配置一个js开发环境.考虑到手机上的Chro ...
- android安卓Sqlite数据库实现用户登录注册
看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...
随机推荐
- perf之record
如果CPU的使用率突然暴涨,如何迅速定位是哪个进程.哪段代码引起的呢?我们需要一个profiling工具,对CPU上执行的代码进行采样.统计,告诉我们CPU到底在忙些什么. perf 就是这样的工具. ...
- 【LeetCode】Missing Ranges
Missing Ranges Given a sorted integer array where the range of elements are [lower, upper] inclusive ...
- springboot(五):spring data jpa的使用
在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...
- 部署hadoop的开发环境
第一步:安装jdk 由于hadoop是java开发的,所以需要JDK来运行代码.这里安装的是jdk1.6. jdk的安装见http://www.cnblogs.com/tommyli/archive/ ...
- k8s之服务发现
一.概述 k8s中支持两种服务发现方法: 环境变量和DNS 二.环境变量 当Pod被创建的时候,k8s将为Pod设置每一个Service的相关环境变量,这些环境变量包括两种类型: k8s Servic ...
- 【javascript】escape()、encodeURI()、encodeURIComponent()区别详解
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...
- Oracle->mysql碰到的问题
1.大小写敏感的区别(如果服务器OS是linux). 在oracle中一般情况下不区分大小写.有时候我们在使用oracle不注意大小写的问题,表名和字段名不加双引号是不区分大小写的,像这样:in ...
- c#之hello world
前言:公司开始转型java,作为javaer,负责其他同事转型,期间以为工作需要,需要简单学习c#语法,顾有此文,及其后续的一系列文章(c#里头的一些优点,可以为提升java的思想带来帮助) 1. 安 ...
- jquery ajax context
function yflib_roomList(tpl) { var target = $(".roomList > li"); var _this = null; $(&q ...
- html5 ajax 文件上传
http://html5demos.com/dnd-upload 看这个例子看了一会儿...这个是支持拖拽的上传. 下面代码是一个简单的ajax的文件上传: function match(url,rs ...