安卓的三个基本概念:Activity、Adapter 和 List
Activity
一、基本概念
Activity是Android的四大组件(activity、service、content provider、broadcast receiver)之一,简单来说就是一个界面,一个用于与用户交互的界面,一个app有最少一个Activity。
二、生命周期
一个Activity的生命周期在app执行的过程中有运行(Running)、暂停(Paused)、停止(Stopped)、被销毁(Killed)这四个状态。在用户或安卓系统做了某些措施(执行相关方法)后,该Activity的生命周期会发生相应的变化。
Activity的状态转换图解
状态 | 是否有内存实例 | 用户是否可见 | 是否处于最前面 |
Killed | N | N | N |
Stopped | Y | N | N |
Paused | Y | Y | N |
Running | Y | Y | Y |
下面用Android Studio的日志更清晰的给大家展示一下Activity生命周期的转换。
先在Activity.java中 加入以下方法:
private static final String TAG = "aActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,"onCreate() called");
setContentView(R.layout.activity_quiz);
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG,"onResume() called");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG,"onPause() called");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG,"onDestroy() called");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG,"onStop() called");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG,"onStart() called");
}
可以看到 当我们打开应用的时候,同时调用了onCreate(),onStart(),onResume()三个方法,而当我们按下后退键关闭应用的时候,调用了onPause(),onStop(),onDestroy()三个方法。
三、不同Activity中的转换
先介绍几个概念:
ActivityManager:安卓系统中控制Activity的结构,当我们按下后退键,home键时,其实是把Activity交给安卓系统的ActivityManager处理
Activity栈:用于存放若干个Activity(不一定属于同一个应用)的栈。
intent类:可用于在一个Activity中调用另外一个Activity类、在不同activity中传递数据。
//firstActivity.java
Intent intent = new Intent(firstActivity.this, secondActivity.class);
intent.putExtra("stringData", "hello");
intent.putExtra("intData", 100);
这里我们构造了一个新intent,在firstActivity中调用secondActivity,并调用intent的putExtra函数,把stringData,intData俩个个变量传递给secondActivity中
getIntent().getStringExtra("stringData");
getIntent().getIntExtra("intData", 0);
调用相应的getIntent().getXXXExtra()以返回从firstActivity中传递的变量值。
Adapter
一、概念
Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。经常与listView连用
二、分类及用法
BaseAdapter,ArrayAdapter,SimpleAdapter等等
其中这三个是最常用的
BaseAdapter
使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView、GridView、Gallery、Spinner等等。它是直接继承自接口类Adapter的,使用BaseAdapter时需要重写很多方法.其中这四个方法最重要
- getCount : 要绑定的条目的数目,比如格子的数量
- getItem : 根据一个索引(位置)获得该位置的对象
- getItemId : 获取条目的id
- getView : 获取该条目要显示的界面
ArrayAdapter
列表的显示需要三个元素:
- ListVeiw 用来展示列表的View。
- 适配器 用来把数据映射到ListView上的中介。
- 数据 具体的将被映射的字符串,图片,或者基本组件。主要用于简单的文本字符串的实现
SimpleAdapter
SimpleAdapter与BaseAdapter类似,也可以比较灵活。
SimpleAdapter使用的数据结构是 HashMap ,这意味着,如果需要操作的数据对象结构过于复杂时,比如成员很多,成员内容不是基本类型等情况时,需要写相关的转化代码,这会便利程序的效率和可维护性变差 。有时,我们会面临使用哪种适配器的问题。如果数据结构很简单,操作的数据对象成员很少,没有非基本类型的数据成员,只是做为简单的展示,那么 simpleadapter 是很好的选择,简捷高效快速。如果成员很多,成员中包含复杂的对象,如 Button , darwable 等,使用baseadapter 会让代码变得简捷效率。
List
如图所示,List是继承至Collection的一个接口
一个 List 是一个元素有序的、可以重复、可以为 null 的集合(有时候我们也叫它“序列”)。
Java 集合框架中最常使用的几种 List 实现类是 ArrayList,LinkedList 和 Vector。在各种 List 中,最好的做法是以 ArrayList 作为默认选择。 当插入、删除频繁时,使用 LinkedList,Vector 总是比 ArrayList 慢,所以要尽量避免使用它。
List并不是Android特有的结构,在此不做详细介绍。