第一章
1.1.3 安卓的体系结构
- 应用程序层。
- 应用程序框架层,内容提供者在这一层。
- 核心类库
- Linux内核层
1.1.4 Dalvik 虚拟机
1.4 安卓程序结构
1.5资源的管理和使用
资源在src/main/res目录
调用方式:
1、在Activity中可以通过getResources().getDrawable方法调用图片资源。
getResources().getDrawable(R.mipmap.ic_launcher); //调用以mipmap开头的文件夹中的资源文件
getResources().getDrawable(R.drawable.icon); //调用以drawable开头的文件夹中的资源文件
2、在XML文件中调用图片资源
@mipmap/ic_launcher //调用以mipmap开头的文件夹中的资源文件
@drawable/icon //调用以drawable开头的文件夹中的资源文件
1.6.2 Logcat 的使用
分为6个等级
第二章
2.3 界面布局的通用属性
属性名称 | 功能描述 |
---|---|
android:id | 设置布局的标识 |
android:layout_width | 设置布局的宽度 |
android:layout_height | 设置布局的高度 |
android:backgroud | 设置布局的背景 |
android:layout_margin | 设置当前布局与屏幕边界、周围布局或控件的距离 |
android:padding | 设置当前布局与改布局中控件的距离 |
2.4.1 线性布局
LinearLayout 中常见的两个属性
android:orientation | 设置布局内控件的排列顺序 |
android:layout_weight | 在布局内设置控件权重,属性值可直接写int值 |
第三章
3.1.1 TextView控件 用于显示文本信息。
android:layout_width
扫描二维码关注公众号,回复:
16521378 查看本文章
|
控制文本框的宽度 |
android:layout_height |
控制文本框的高度 |
android:text |
显示文本字符串 |
android:textColor |
控制文字的颜色 |
android:textSize |
控制文字的大小 |
android:gravity |
控制文本框位置,如设置成'center',将居中显示 |
3.1.2 EditText控件 编辑框,是 TextView控件的子类
android:layout_width |
控制编辑框的宽度 |
android:layout_height |
控制编辑框的高度 |
android:hint |
设置显示在空间上的提示信息 |
android:maxLines |
设置编辑框的最大行数 |
android:textColor |
控制编辑框输入文字的颜色 |
android:textSize |
控制编辑框输入文字的大小 |
android:textStyle |
控制编辑框输入文字的样式 |
3.1.3 Button 控件 实现点击的三种方法,代码
1、在布局文件中指定onClick属性的值
<Button
......
android:onClick="click" />
2、使用匿名内部类
btn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view){
//实现点击事件的代码
}
);
3、使用Activity实现OnClickListener接口
public class Activity extends AppCompatActivity implements View.onClickListener{
@Override
protected void onCreate (Bundle savedInstanceState){
......
btn.setOnClickListener(this);
}
@Override
public void onClick(View view){
//实现点击事件的代码
}
}
3.2.2 常用数据适配器
BaseAdapter SimpleAdapter ArrayAdapter
第四章
4.1 Activity的生命周期
1、启动状态 2、运行状态 3、暂停状态 4、停止状态 5、销毁状态
4.3 启动和关闭Activity 代码会写
启动:
public void startActivity(Intent intent)
Intent intent = new Intent(MainActivity.this,secoundActivity.class);
startActivity(intent);
关闭:
public void finish()
Button button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new Voew.OnClickListener()I
@Override
public void onClick(View v){
finish(); //关闭当前的activity
});
4.3.1 Intent 意图
1、显式Intent :直接指定目标组件。 实现代码:
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
第一个参数 this 表示当前Activity,第二个参数SecondActivity.class表示要跳转到的目标Activity。
2、隐式Intent :不会明确指出需要激活的目标组件,它被广泛应用在不同应用程序之间,进行消息传递。 实现代码:
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="cn.itcast.START_ACTIVITY"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
4.3.2 IntentFilter 过滤器
1、action属性匹配规则
<intent-filter>
<action android:name"android.intent.action.DEIT"/>
<action android:name"android.intent.action.VIEW"/>
</intent-filter>
2、data属性匹配规则
<intent-filter>
<data android:mimeType="video/mpeg" android:scheme="http......"/>
<data android:mimeType="audio/mpeg" android:scheme="http......"/>
......
</intent-filter>
3、category属性匹配规则
<intent-filter>
<category android:name"android.intent.category.DEFAULT"/>
<category android:name"android.intent.category.BROWSABLE"/>
......
</intent-filter>
4.4 Activity之间的跳转
4.4.1 Activity之间的数据传递
(1)使用Intent的putExtra()方法传递数据
(2)使用Bundle类传递数据
4.4.2 Activity之间的数据回传
- startActivityForResult()方法,用于开启一个Activity,当开启的Activity被销毁时,会从销毁的Activity中返回数据。
- setResult()方法,用于携带数据进行回传。
- onActivityResult()方法,用于接收回传的数据。
4.5.2 Activity的启动模式
启动模式有4种:standard singleTop singleTask singleInstance模式,其中最常用的是standard
4.6.2 Fragment 生命周期和活动单元生命周期比较
Activity生命周期有5种状态,启动状态、运行状态、暂停状态、停止状态、销毁状态,Fragment生命周期也有着几种状态。
因为Fragment是被嵌入Activity中使用的,所有它的生命周期的状态直接接受其所属的Activity的生命周期状态影响。1、当在Activity中创建Fragment时,Fragment处于启动状态;2、当Activity被暂停时,其中所有的Fragment也被暂停;3、当一个Activity处于运行状态时,可单独地对每一个Fragment进行操作,如添加或删除,当进行添加操作时,Fragment处于启动状态;4、当进行删除操作时,Fragment处于销毁状态。
第五章
5.1 数据存储方式 5种:
- 文件存储
- SharedPreferences存储
- SQLite数据库存储
- Content Provide
- 网络存储
5.2 文件存储
1、内部存储
FileOutPutStream fos = openFileOutPut(String name, int mode);
FileInputStream fis = openFileInput(String name);
mode表示文件的操作模式。有4种取值:
- MODE_PRIVATE:该文件只能被当前程序读写。
- MODE_APPEND:该文件的内容可以追加。
- MODE_WORLD_READABLE:该文件的内容可以被其他程序读。
- MODE_WORLD_WRITEABLE:该文件的内容可以被其他程序写。
2、外部存储:动态申请权限
5.4 SQLite数据库存储
概念:它可以存储应用程序中大量数据,并对数据进行管理和维护。
重要的两个类:SQLiteOpenHelper类,SQLiteDatabase类
5.4.3 数据库中的事务,4个基本要素
- 原子性:事务中的操作要么全部成功,要么全部失败回滚。
- 一致性:数据库的事务不能破坏关系数据的完整性及业务逻辑上的一致性。
- 隔离性:事务内部的操作都必须封锁起来,不会被其他事务影响到。
- 持久性:事务一旦提交,该事务对数据做的更改便持久的保存在数据库中。
第六章
6.1内容提供者概述
• 内容提供者(ContentProvider)是Android系统四大组件 之一,用于保存和检索数据,是Android系统中不同应 用程序间共享数据的接口。
• ContentProvider(数据提供者)是应用程序之间共 享数据的一种接口机制,是一种更为高级的数据共享 方法,可以指定需要共享的数据,而其它应用程序则 则可在不知道数据来源、路径的情况下,对共享数据 进行查询、添加、删除和更新等操作。
• 在Android系统中,许多Android系统内置的数据也是 通过ContentProvider提供给用户使用,例如通讯录、 音视频文件和图像文件等。
工作原理:
数据模型:ContentProvider 使用基于数据库模型的简单表格来提供需要共享的数据,在该表格中,每一行表示一条记录,而每一列代表特定类型和含义的数据,并且其中每一条数据记录都包含一个名为“_ID”的字段类标识每条数据。
Uri:由3部分组成,scheme authority path
6.4 内容观察者概念
•若应用程序需要实时监听ContentProvider共享的数据是否发生变化,可使用Android系统提供的内容观察者(ContentObserver)。
•内容观察者(ContentObserver)用于观察指定Uri所代表的数据 的变化,当ContentObserver观察到指定Uri代表的数据发生变化 时,就会触发onChange()方法,此时在onChange()方法中使用 ContentResovler可以查询到变化的数据。
•要使用ContentObserver观察数据变化,就必须在ContentProvider 的delete()、insert()、update()方法中调用ContentResolver的 notifyChange()方法。
工作原理:
第七章
7.1 广播机制的概述
- 广播(Broadcast)是一种运用在应用程序之间传递消息的机制。
- 广播接收者(BroadcastReceiver)是用来过滤、接收并响应广播的 一类组件。
- 广播接收者可监听系统中的广播消息,在不同组件之间进行通信'
注册广播接收者
动态注册:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
receiver = new MyBroadcastReceiver(); //实例化广播接收者
// 实例化过滤器并设置要过滤的广播
String action = "android.Telephony.SMS_RECEIVED";
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(action);
registerReceiver(receiver, intentFilter); // 注册广播
}
@Override
protected void onDestrpy(){
super.onDestroy();
unregisterReceiver(receiver); // 当Activity销毁时注销广播接收者
}
静态注册: 在 AndroidManifest.xml 中
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
</receiver>
7.3.3 广播的类型
无序广播:无序广播是完全异步执行,发送广播时所有监听这个广播的广播接收者都会接收到此消息,但接收的顺序不确定。
有序广播:按照接收者的优先级接收,只有一个广播接收者能接收消息,在此广播接收者中逻辑执行完毕后,才会继续传递。
优先级
拦截
如果想要拦截一个有序广播,则必须在优先级较高的广播接收者中拦截接收到的广播。添加abortBroadcast()方法拦截广播。
第八章
8.1 服务的概述
Service(服务)是Android四大组件之一,能够在后台长时间执行操 作并且不提供用户界面的应用程序组件。Service可以与其他组件进行交互,一般是由Activity启动,但是并不依赖于Activity。当 Activity的生命周期结束时,Service仍然会继续运行,直到自己的生命周期结束为止。
Service通常被称为“后台服务”,其中“后台”一词是相对于前台而言,具体是指其本身的运行并不依赖于用户可视的UI界面,除此之外,Service还具有较长的时间运行特性。他的应用场景主要有两个,分别是后台运行和跨进程访问。
8.3 服务的生命周期
使用不同的方法启动服务,其生命周期也是不同的。
8.4 服务的启动方式
startService()方法启动服务,服务会长期的在后台运行,并且服务的状态与开启者的状态没有关系,即使启动服务的组件已经被销毁,服务会依旧运行。
8.5.1 本地服务通信和远程服务通信的区别
在Android系统中,服务的通信方式有两种,一种是本地服务通信,一种是远程服务通信。
本地服务通信是指应用程序内部的通信,而远程服务通信是指两个应用程序之间的通信。
使用这两种方式进行通信时必须满足一个前提,就是服务必须以绑定方式开启。
远程服务通信是通过AIDL(Android Interface Definition Language)实现的,它是一种接口定义语言 (Interface Definition Language),其语法格式非常简单,与Java中定义接口很相似,但是存在几点差异,具体如下:
- AIDL 定义接口的源代码必须以.aidl 结尾
- AIDL 接口中用到的数据类型,除了基本数据类型、String、List、Map、CharSequence 之 外,其他类型全部都需要导入包,即使它们在同一个包中
数据传递
在Android系统中,进程间传递的数据包括:
- Java语言支持的基本数据类型
- 用户自定义的数据类型
第九章
9.1 通过HTTP访问网络
通过标准的Java类HttpURLConnection便可实现基于URL的请求及响应功能。
9.1.2 使用 HttpURLConnection 访问网络
URL url = new URl("http://www.itcast.cn"); //在URL构造方法中传入要访问资源的路径
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET"); //设置请求方式
conn.setConnectTimeout(5000); //设置超时时间
InputStream is = conn.getInputStream(); //获取服务器返回的输入流
conn.disconnect(); //关闭http连接
使用GET方式提交数据
以实体的方式得到请求URL指向的的资源信息,它向服务器提交的参数跟在请求URL后面。使用GET方式访问网络URL的内容一般要小于1024字节。
使用POST方式提交数据
提交的数据以键值对的形式封装在请求实体中,用户通过浏览器无法看到发生的请求数据,因此POST方式比GET方式相对安全。
9.2 使用WbeView控件进行网络开发
9.3 JSON 数据
对象结构 以 " { " 开始 以 " } " 结束
数组结构 以 " [ " 开始 以 " ] " 结束
需要注意的是:如果使用JSON存储单个数据(如"abc"),一定要使用数组结构,不要使用对象结构。因为对象结构必须是“键的名称:值”的形式。另外,JSON文件的扩展名为.json。
9.3.2 JSON的解析
使用JSONObject类解析对象结构的JSON数据
JSONObject jsonObj = new JSONObject(jo=son1);
Sreing name = jsonObj.optString("name");
int age = jsonObj.optInt("age");
boolean married = jsonObj.optBoolean("married");
使用JSONArray类解析数组结构的JSON数据
JSONArray jsonArray = new JSONArray(json2);
for(int i=0 ;i < jsonArray.length() ; i++){
JSONObject jsonObj = jsonArray.getJSONObject(i);
String name = jsonObj.optString("name");
int age = jsonObj.opyInt("age");
}
使用GSON库解析对象结构的JSON数据
Gson gson = new Gson();
Person1 person = gson.fromJson(json1,Person1.class);
使用GSON库解析数组结构的JSON数据
Gson gson = new Gson();
Type listType = new TypeToken<List<Person2>>(){}.getType();
List<Person2> person2 = gson.fromJson(json2,listType);
9.4 Handler 消息机制
Handler是一种异步回调机制,主要负责与子线程进行通信。
Handler机制主要包括四个关键对象:
- Message:消息,它由MessageQueue统一列队,由Handler处理。
- Handler:处理者,主要负责Message的发送以及处理。
- MessageQueue:消息队列,主要用来存放Handler发送过来的消息,并且按照先入先出的规则执行。
- Looper:消息循环,不断的从MessageQueue中抽取Message并执行。
Handler消息机制是通过上述四个关键对象的配合使用而完成的。在UI线程中创建Handler对象,并通过该对象的sendMessage()方法发送消息到MessageQueue中,接着通过Looper调用loop()方法不断的从MessageQueue中获取消息,并分发到Handler中,最终通过Handler的handleMessage()方法处理获取的消息。
第十章
10.1 常用的绘图类 作用和方法
- Bitmap类可以获取图像文件信息,对图像进行剪切、旋转、缩放等操作,并可以指定格式保存图像文件。
- BitmapFactory类是位图工厂,它是一个工具类。
- Paint类代表画笔,用来描述图形的颜色及风格。
- Canvas类代表画布,通过该类提供的方法,可以绘制各种图形。
第十一章
11.1.1 使用MedidPlayer 类播放音频
MediaPlayer类用于播放音频和视频文件,该类提供了全面的方法支持多种格式的音频文件(3gp、mp4)
11.1.2 使用SoundPool 类播放音频
SoundPool即音频池,可以同时播放多个短小的音频,而且占用的资源比较少,他适合在应用程序中播放按键音或者消息提示音等。
11.2.1 使用VideoView 控件播放视频
VideoView控件是播放视频用的,借助它可以完成一个简易的视频播放器。
11.2.3 MediaPlayer 类和SurfaceView 控件播放视频
MediaPlayer可以播放视频,只不过它在播放视频时没有图像输出,因此需要使用SurfaceView组件展现图像。与VideoView相比,这种方式更易于扩展。
SurfaceView组件继承自View,用于显示图像的组件。SurfaceView最大的特点就是它的双缓冲技术,所谓的双缓冲技术是在它内部有两个线程。