【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
最新文章
- What&#39;s new in Windows 10 Enterprise with Microsoft Edge.(Windows 10 新功能)
- spring 中容器 map、set、list、property 的 bean 实例化
- 你也可以用java的swing可以做出这么炫的mp3播放器_源码下载
- java 动态代理范例 InvocationHandler与Proxy
- Tkinter教程之Toplevel篇
- 文件I/O(不带缓冲)之lseek函数
- 创建型-生成器模式(Builder)
- 找不到可安装的ISAM
- Qt经典—线程、事件与Qobject(耳目一新)
- JAXB 注解
- osgearth earth文件规范-符号参考
- GitLab服务器IP地址设置
- RadioButton监听事件
- [模板] 动态树/LCT
- highchart 十字准星 crosshairs
- anyalarm
- 【转】重写Equals为什么要同时重写GetHashCode
- JavaScript:谈谈let和const
- You Don&#39;t Know JS: Scope &; Closures (附加:Lexical/dynamic作用域)(附加:Lexical-this)
- 配置B类内网 和 配置A类内网
热门文章
- memcached全面剖析--3.memcached的删除机制和发展方向
- Apache2.2和Apache2.4中httpd.conf配置文件 权限的异同
- Log4j 基本配置示例
- React(0.13) 组件的组合使用
- hadoop遇到的问题及处理
- VC++对话框中加状态栏
- debian8最小化安装,字符界面的中文配置
- Hive sql 查询数据库查询 top-n
- [转]PostgreSQL 逻辑结构 和 权限体系 介绍
- Web安全之XSS(Cross Site Scripting)深入理解