【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 ...
随机推荐
- [转载]将archlinux 2013-06-01版,安装配置为个人工作站
原文地址:将archlinux 2013-06-01版,安装配置为个人工作站作者:老圃无蔓 安装所使用的镜像为:archlinux-2013.06.01-dual.iso.首先请看看我安装完成之后的效 ...
- samba服务的高级进阶配置
本文将学习一下几个方面的内容,将会结合具体的实验来一步步实现. 1. 用户账号的映射 2. 使用IP对客户端进行访问控制 3. 使用域名对客户端进行访问控制 4. 使用通配符对客户端进行访问控制 5. ...
- keras callback中的stop_training
keras这个框架简洁优美,设计上堪称典范.而tensorflow就显得臃肿庞杂,混乱不清.当然,keras的周边部件比如callbacks.datasets.preprocessing有许多过度设计 ...
- 推荐系统 SVD和SVD++算法
推荐系统 SVD和SVD++算法 SVD: SVD++: [Reference] 1.SVD在推荐系统中的应用详解以及算法推导 2.推荐系统——SVD/SVD++ 3.SVD++ 4.SVD++协 ...
- Java 过滤特殊字符的 正则表达式
Java正则表达式学习: 因为正则表达式是一个很庞杂的体系,此例仅举些入门的概念,更多的请参阅相关书籍及自行摸索. \\ 反斜杠 \t 间隔 ('\u0009') \n 换行 ('\u000A') \ ...
- socket编程及API简介
什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域 ...
- HDU 4324 Triangle LOVE (拓扑排序)
Triangle LOVE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- webpack window 安装loader
1.安装loadernpm install css-loader style-loader --save-dev 2.配置loader,在webpack.config.js中 module: { lo ...
- C++下的命名空间
转自:http://blog.chinaunix.net/uid-24219701-id-2105573.html 实例: #include <iostream> using namesp ...
- python学习笔记——urllib库中的parse
1 urllib.parse urllib 库中包含有如下内容 Package contents error parse request response robotparser 其中urllib.p ...