一、Android简介:
由Andy Rubin开发,
常用手机版本:谷哥:Nexus、华为:EMUI、魅族:Flyme
Adnroid是运行在Java虚拟机(JVM)上大部分免费的开源的、应用通过权限控制很容易获取用户敏感信息。
二、Android系统框架:
Android虚拟机dalvik与JVM区别(版权问题开发的dalvik):
Dalvik |
Jvm |
识别的是dex文件 |
识别的是class jar包(多个class的压缩包) |
架构是基于寄存器 |
架构是基于栈 |
Android ART模式(自4.4后出现):安装应用时把dex文件转换成机器码存在本地
三、开发环境:
SDK文件目录
进入adb shell
Android Studio两种apk模式:
- 1。Debug(默认有签名:debug.keystore)
- 2。Release
四、SDK基础:
1。视图控件(View):使用xml布局文件定义界面。绝大部分UI组件都放在android.widget包及其子包。
资源文件概览
2。布局介绍:
1。线形布局LinearLayout
2。相对布局RelativeLayout
3。帧布局FrameLayout
4。表格布局TableLayout
5。网格布局GridLayout
6。绝对布局AbsoluteLayout
3。Textview和EditText
TextView:继承于View是EditText和Button两个组件父类,只能显示文本信息
EditText:允许用户文本编辑
4。ImageView:显示图片
5。Button和ImageButton
Button |
ImageButton |
按钮点击事件 |
|
有text属性 |
有src属性 |
可以设置文本 |
可以设置图片 |
6。RadioButton单选框
7。Spinner
1。静态方式
在values文件夹下生成数组数据
在layout文件下的main.xml文件中
效果
2。动态方式,使用配适器添加数据
8。AutoCompleteTextView
9。Toast:短暂消息提示,不打断用户操作
特点:无法被操作,显示后会自动消失,无需用户操作
大部分只显示文本字符串,只用两种属性
Toast.LENGTH_SHORT 2秒
Toast.LENGTH_LONG 3.5秒
自定义Toast步骤:
1。通过构造函数建立Toast实例
2。调用setView,指示Toast显示内容
3。调用setGravity,设定显示位置
4。调用setDuration,设定显示时间
5。调用show()显示
10。Dialog对话框:
a.提供原界面没有空间呈现的内容 eg:音量设置
b.提示进一步确认信息
常用对话框:
ProgressDialog:进度对话框
DatePickerDialog:日期选择对话框
TimePickerDialog:时间选择对话框
AlertDialog:风格与界面一致,三部分组成:标题、内容、按钮。使用Builder类构建
三个组成部分:
1。标题(setTitle()方法)
2。内容(setMessage()方法)
3。按钮(setButton()方法
setPositiveButton()方法
setNegativeButton()方法等)
使用Builder类构建最简单,提供了一系列的方法配置AlertDialog
在调用builder调用show()方法前,仍然可对Dialog做其他设置
1。Dialog主体是List回调接口
2。Dialog主体是CheckBox回调接口
3。Dialog主体是RadioButton回调接口
4。完全自定义Dialog内容
11。复杂控件:
ListView:最广泛的数据显示控件
常用属性
属性名 |
说明 |
divider |
设置分割线的颜色 |
dividerHeight |
设置分割线的高度 |
Scrollbars |
设置滚动条的隐藏或显示 |
Fadescrollbars |
设置滚动条的自动隐藏或显示 |
Entries |
引用一个将使用ListView的数组。 若静态数组,使用此属性比在程序中写入更为简单 |
ListView的使用:
第一种:一般
1。在布局文件中编写代码(添加标签)
2。Activity中
a。获取ListView对象
b。准备数据源
c。配置配适器
d。将配适器关联到ListView中
第二种:使用ArrayAdapter实现文字列表
1。布局文件编写代码
2。Xml文件中添加ListView标签
3。Activity中编写代码
a。获取ListView对象
b。准备数据源(Array数组)
c。配置配适器
d。将配适器关联到ListView中
配适器(Adapter):一个接口,派生了ListAdapter(提供列表)和SpinnerAdapter(提供列表选项)两个字接口
配适器是数据和视图的桥梁,负责把数据所提供的内容显示到视图所定义的外观。
1。配适器种类
属性名 |
说明 |
ArrayAdapter |
适用于简单的文字列表 |
SimpleAdapter |
适用于简单的图文混搭列表 |
SimpleCursorAdapter |
适用于数据源是数据库的列表 |
自定义Adapter(继承BaseAdapter) |
适用于绝大多数情况 |
12。Activity之间的数据传递:意图
意图Intent:Android三个重要组件Activity、Service、Broadcast Receiver(广播),都依靠Intent启动和数据交换。
Intent分两类:
1。显示意图:明确指出组件名称的Intent,可以调用setComponent或setClass指定
源码:
Eg:启动第二个页面
2。隐式意图:没有明确的组件名称,必须包含足够的属性信息,需要在清单文件activity中添加<intent-filter>标签并且在内添加Action,Data,Category。由Android系统帮助寻找Intent请求相匹配的组件
清单文件中,在<application </activity>之间,配置隐式Intent
Action字符串 |
描述 |
ACTION_MAIN |
主程序入口,不会接收数据,结束后不返回数据 |
ACTION_EDIT |
打开编辑Data里指定数据相对应的应用程序 |
ACTION_CALL |
拨打Data里面指定的电话号码 |
ACTION_DIAL |
启动系统拨号程序或其他拨号程序,显示Data里号码 |
Data数据属性:描述Intent要操作的数据URI和数据类型
Extra额外属性:使用Intent连接不同的组件时,附加额外信息,传递数据
Category类别:对被请求组件的额外描述信息。
Intent类中的常量字符串
Category字符串 |
描述 |
CATEGORY_BROWSABLE |
目标Activity能够在浏览器中点击链接激活 |
CATEGORY_HOME |
手机开机后显示Activity,或按下Home键显示界面 |
CATEGORY_LAUNCHER |
应用程序最先被执行的Activity |
CATEGORY_PREFERENCE |
偏好设置的Activity |
注意:一条<intent-filter>元素至少包含一个<action>,否则任何Intent请求都不能和该<intent-filter>匹配
Intent的数据传输:
Activity之间的数据传递步骤
显示:
1。创建新的Activity
2。启动Activity
3。启动之前传递数据,启动时接收数据
4。将数据封装到Intent对象中传递
5。将数据封装到Bundle对象中传递
隐式:通过设置<action>标签
1。匹配<intent-filter>中的Action
2。接收隐式intent必须要在intent过滤器中包含 “android.intent.category.DEFAULT"
3。用Uri来做data
4。附加信息extras
Intent数据返回
onSaveInstanceState()确保活动被销毁前调用,保存关键数据
1。以startActivityForResult()方式启动
2。在新界面使用setResult()返回
3。上一个活动中重写onActivityResult()
Activity四大组件:
Activity生命周期:
1。返回栈:Android活动可以叠加,新的Activity可以覆盖原活动,返回销毁最上面的Activity,下面的Activity重新活动。
Activity四种活动状态:
运行状态:Activity在返回栈顶,系统不会回收活动
暂停状态:Activity不在栈顶,但可见
停止状态:Activity不在栈顶,不可见,系统会保存相关状态,但需要内存时,会进行回收
销毁状态:Activity离开返回栈,系统优先回收
Activity生命周期:
Activity四种启动模式:android:launchMode=" "
1。standared模式(默认):
每当启动一个新的活动,就在返回栈中入栈,并处于栈顶,不检查栈顶。
2。singleTop模式(解决栈顶重复问题)
启动前检测栈顶,如果存在该活动,直接使用,如果不为于栈顶,仍然创建新的活动对象
3。singleTask模式
启动前检测整个返回栈,存在直接使用并将该活动之上的所有活动出栈。
4。singleInstance模式(实现其他程序共享这个活动的实例)
创建一个新栈来管理活动
Activity响应事件机制:每个View都有自己的回调方法,常用的回调方法:onKeyDown、onKeyUp、onTouchEvent、onTrackballEvent、onFocusChanged
1。基于回调机制
2。基于监听机制
广播:
广播接收者BroadcastReceiver:类似windows的消息钩子,全局监视器,实现组件间通信。
全局广播:广播可以被任何应用程序收到
广播类型:
有序广播(类似串联):通过sendOrderedBroadcast()发送广播,adortBroadcast()截断广播
无序广播(类似并联)标准广播:完全异步执行,通过sendBroadcast()发送
本地广播:只能在本应用程序接收,只能代码注册不能静态注册
使用方式:
LocalBroadcastManager管理广播
LocalBroadcastManager.getInstance()获得实例
xx.registerReceiver()注册广播
xx.sendBroadcast()发送广播
xx.unregisterReceiver()取消注册
广播的注册
静态注册
动态注册
服务:
特点:1。后台运行
2。没有界面
3。无法自己启动
4。单例模式
生命周期
一个service的onStartCommand可能重复调用多次
两种启动方式:
1。startService:启动的服务所在的进程属于服务进程,Activity一旦启动服务,就与Activity无关
2。binService:启动的服务所在的进程不属于服务进程,Activity与服务建立连接,Activity退出服务也退出
Android网络接口
使用的网络协议:HTTP,HTTPS,TCP/IP,SOCKET
网络接口:
Java.net
Org.apache接口
Android.net
两种网络架构:
B/S模式:浏览器/服务端,应用层HTTP协议通讯,不需要特定客户端软件
C/S模式:客户端/服务器,任意网络协议,特定客户端
服务端返回内容的方式:
HTML代码形式返回
XML字符串形式返回
Json对象方式返回
Android多线程:主线程不能进行耗时操作否则会报异常。anr 阻塞异常
耗时操作使用子线程操作。只有主线程才可以更新UI。
runOnUiThread()方法在主线程或子线程都可以更新UI
handler原理:
handler:用来发送消息和处理消息
Looper:取消息队列取消息,主线程一创建,Looper就有了
使用步骤:
1。主线程定义Handler
2。使用handler重写handler里面的bandlemessage()方法
3。在主线程创建hanndler子线程发消息
4。handlermessage方法里更新UI