简介:
Activity(Android四大组件之一)是一个显示在屏幕上的用户交互界面,是用户可以见到的界面。Activity的每个界面都是独立的,主要是用户体验不同的Android应用程序。应用除了可以访问自己的Activity外,还可以访问其他App的Activity。
一个Activity一般代表手机上的一屏,相当于浏览器的一个页面,是Android程序的可视化界面窗口。Activity可容纳控件、菜单等界面元素,能够响应所用的窗口事件,从而实现与用户交互。
注意:
- 一个应用程序可以拥有多个Activity,但同一时刻只能有一个与用户处于交互状态。
- Android对Activity的管理采用栈,具有先进后出属性,任一时刻只有一个Activity处在栈顶,表现为用户界面,处于运行状态。
Activity四种状态
- Active:Activity启动入栈,显示在屏幕的最前端,处于可见活动状态。
- Paused:当Activity被另外一个透明的或者未铺满整个屏幕的Activity覆盖时处于暂停状态。此时它仍可见,但失去了焦点,不能与用户交互。例如,在进行文件编辑的时候弹出保存选项对话框,这个对话框便获得了屏幕焦点,处于活动状态;此时负责文件编辑界面的Activity就处于暂停状态。
- Stop: 当Activity被另外一个Activity完全覆盖时处于终止状态。此时它在屏幕上不可见。例如,用户正在打游戏,此时突然有电话拨入,显示来电界面,这时负责游戏界面的Activity被覆盖,处于终止状态。
- Killed:Activity被系统销毁回收或者没有被启动的状态。例如,用户关闭了一个APP或从APP退出时该APP就处于这个状态。
activity的生命周期状态转换图
回调方法 | 描述 |
onCreate() | 在Activity首次被创建时调用,完成初始化工作,多用于创建视图、为列表绑定数据 |
onStart() | 承接onCreate()方法,当Activity即将变成用户可见的视图时被调用。当Activity转到前台时转 而执行onResume(),当Activity隐藏时转而执行onStop() |
onResum() | 在Activity开始于用户交互之前被调用,即启动,此时活动位于栈的顶部,可以接受用户输入 |
onPause() | 当系统要启动另一个Activity时,调用这个方法暂停当前的Activity并保存它的状态数据. 当Activity转到前台时转而执行onResume(),当Activity隐藏时转而执行onStop() |
onStop() | 当Activity对于用户不可见时调用。如果Activity被重新启动,则执行onRestart(); 如果Activity被关闭,则执行onDestroy() |
onDestroy() | 在Activity销毁前调用,发生在finish()方法执行时,或者系统因为空间不足而临时销毁该Activity的实例时 |
onRestart() | 当Activity停止后再次启动之前被调用,接下来将执行onStart() |
- 启动Activity到运行状态:onCreate()->onStart()->onResume()->界面完全显示。
- 运行状态到暂停状态:界面完全显示->onPause()->界面被部分遮盖。
- 暂停状态到运行状态:界面被部分遮盖->onResume()->界面完全显示。
- 运行状态到停止状态:界面完全显示->onPause()->onStop()->界面完全遮盖。
- 停止状态到运行状态:界面完全遮盖->onRestart()->onStart()->onResume()->界面完全显示
- 退出activity:界面完全显示->onPause()->onStop()->界面完全遮盖->onDestroy()->activity结束生命周期。
Adapter
简介:
适配器在开发中使用率极高,说到底,就是将两个不兼容的类融合在一起,它有点像粘合剂,将不同的东西通过转换使它们能够协作。使用Adapter,便不用为了一个应用而修改各自的接口。
定义:
适配器(Adapter)是把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
适配器的使用场景:
- 系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。
- 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
- 需要一个统一的输出接口,而输入端的类型不可预知。
配适器种类:
- 类适配器
- 对象适配器
Taeget:目标角色,即所期待得到的接口。
Adaptee:现在需要适配的接口。
Adapter:适配器角色,适配器把原接口转换成目标接口。
以电源接口做例子,笔记本电脑电源为5V电压,而家用电压为220V,这种情况即为接口不兼容,此时就需要适配器来进行接口转换。
类适配器实例
//Target角色
public interface FiveVolt
{public int getVolt5();}
//Adaptee角色,需要被转换的对象
public class Volt220
{public int getVolt220()
{return 220;}
}
//Adapter角色,将220V的电压转换为5V的电压
public class VoltAdapter extends Volt220 implements FiveVolt
{public int getVolt5()
{return 5;}
}
//Target角色给出了目标接口,Adaptee则是要被转换的类,Adapter则是将Volt220转换成Target的接口,这就解决了接口不兼容的问题
public class Test
{ public static void main(String[] args)
{VoltAdapter adapter=new VoltAdapter();
System.out.println("输出电压:"+adapter.getVolt5());
}
}
对象适配器实例
//Target角色
public interface FiveVolt
{public int getVolt5();}
//Adaptee角色,需要被转换的对象
public class Volt220
{public int getVolt220()
{return 220;}
}
//对象适配器模式
public class VoltAdapter implements FiveVolt
{ Volt220 mVolt220;
public VoltAdapter(Volt220 adaptee)
{mVolt220=adaptee;}
public int getVolt220()
{return mVolt220.getVolt220();}
public int getVolt5()
{return 5;}
}
public class Test
{ public static void main(String[] args)
{VoltAdapter adapter=new VoltAdapter(new Volt220());
System.out.println("输出电压:"+adapter.getVolt5());
}
}
对象适配器直接将要被适配的对象传递到Adapter中,使用组合的形式实现接口兼容的效果。比类适配器更为灵活,并且被适配对象中的方法也不会暴露出来。
List
定义:
List是标准库中的一个类,可以简单地把它看成双向链表,以线性列的方式管理物件集合,是类库提供的众多容器之一。
特性:
- 在集合的任何位置增加或删除元素都很快,不支持随机存取,但提供对表首元素的操作。
- list以模板方式实现,可以处理任意类型的变量,包括使用者自定义的类型。
- 是一个双向循环链表,每一个元素都知道前面一个元素和后面一个元素。
- list的迭代器不存在失效的情况,需要空间才申请,不会提前预分配。
- 支持一次操作可以从数组内提取多个值,或者同时为多个变量赋值。
- 某些列表实现对列表可能包含的元素有限制。
方法 | 实现功能 |
push_back() | 在列表的后面插入一个元素 |
push_front() | 在列表的前面插入一个元素 |
insert() | 插入一个元素到List中 |
reverse() | 实现列表的逆向 |
remove() | 从List中删除元素 |
pop_front() | 删除第一个元素 |
pop_back() | 删除最后一个元素 |
find() | 查找列表元素 |
sort() | 对整个列表进行排序 |
unique() | 删除List中重复的元素 |
参考书籍:《Android源码设计模式解析与实战》 何红辉 关爱民
《Android移动应用开发》 杨谊 喻德旷