Activity是一个应用组件,提供一个用户界面,用户可与之交互。每个Activity都被分配一个Window以便于绘制用户接口。
Android采用back stack机制,即LIFO队列,当一个新的Activity启动后,将会被存至backstack并被赋予焦点。
它有一个具体的生命周期,控制着Activity与其他Activity转换的流程,这些控制方法采用几个回调函数实现:如onCreate,onStart,onResume,onPause,onStop,onDestory。

  • onCreate
    必须实现的回调函数,系统使用他创建Activity,可初始化一些必须的参数,必须调用setContentView()来定义用户接口,即布局。
  • onPause
    提交或者保存任何应该被持久化的数据。

Implementing a User Interface

一个Activity的UI是由层层的view表示,这些view派生自View类。每个View控制Activity Window窗口内的一个矩形区域,
- Widgets,提供交互或者可视的元素,诸如button,check box
- Layouts,派生自ViewGroup,为子view提供独一无二的布局模型,诸如linearlayout。

在Manifest中声明Activity

              ...    ...

Using Intent Filters

这些都在Intent Filters章节中说明了。

Starting an Activity

使用 startActivity()即可

Starting an activity for a result

调用 startActivityForResult() 。
实现回调函数onActivityResult。需要定义请求码,并在回调函数中判断,以及执行的结果是否为RESULT_OK。

Shutting Down an Activity

finish() or finishActivity().

Managing the Activity Lifecycle

三个必要的状态:
- Resumed, Activity在前台显示,并且拥有用户焦点
- Paused, 另外一个Activity在前台显示,并且拥有焦点,但该Activity仍然可见,并且完全存活,它的Activity对象被保留在内存中,维持这所有的状态和成员信息,且还附着在Window Manager上。但在内存极低的条件下,可被系统kill掉。
- Stopped, 完全被另外一个Activity遮蔽,但依然处于存活状态,与Paused相比,它不再附着Window Manager上。且在系统需要内存时可被kill掉。

如果activity处于paused或则和stopped,系统可通过调用其finish方法或者是直接kill掉其process。当被重新打开时,必须完全重构。

Implementing the lifecycle callbacks

public class ExampleActivity extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // The activity is being created.    }    @Override    protected void onStart() {        super.onStart();        // The activity is about to become visible.    }    @Override    protected void onResume() {        super.onResume();        // The activity has become visible (it is now "resumed").    }    @Override    protected void onPause() {        super.onPause();        // Another activity is taking focus (this activity is about to be "paused").    }    @Override    protected void onStop() {        super.onStop();        // The activity is no longer visible (it is now "stopped")    }    @Override    protected void onDestroy() {        super.onDestroy();        // The activity is about to be destroyed.    }}

Tip: 每个回调,都必须实现自己的父类方法super.onXXX

  • 完整的生命周期,自onCreate到onDestory。
  • 可视周期,onStart到onStop
  • 前台周期,onResume到onPause
    可被杀掉的周期包括onPause到onDestory。

其中onStop后再回来,需要调用onRestart,然后才是onStart。

Saving activity state

当其他Activity来到前台,应调用onSaveInstanceState()来保存状态(一般会在onStop之前也可能在onPause之前调用),这些状态以KVP保存到Bundle中。当Activity重新回到前台后,可通过onCreate或 onRestoreInstanceState()来重建状态。如果无任何状态,Bundle是null。

Tip: 一般来讲,所有的View都已经默认实现了onSaveInstanceState,可保存在UI所做的改变,且在Activity重回前台时,重装这些值。前提是每个需要保存的view都已经设置android:id这个标签。
如果重写onSaveInstanceState方法,那么必须调用其父类的该方法实现,并且相应地重写onRestoreInstanceState()。

Caution:由于无法保证onSaveInstanceState方法一定会被调用,因此,最好将一些持久化的数据放到onPause方法中。

测试方法,可简单旋转屏幕,以使得Activity可以重新onCreate。

Handling configuration changes

有些配置(such as screen orientation, keyboard availability, and language)可在运行过程中进行修改,当这些修改完成后,将会导致Android 重建该Activity(系统调用onDestory,然后立即调用onCreate)。
最好的方式处理这些问题,就是调用onSaveInstanceState() and onRestoreInstanceState() (or onCreate())。

Coordinating activities

两个Activity的切换,其生命周期是可以预测,比如
A 启动 B,那么其流程为:

  1. A 的 onPause方法启用。
  2. B 的onCreate,onStart,onResume依次启用。
  3. 当A不再可见,调用onStop。

因此,如果A有数据共享给B,那么可在onPause里进行数据存储,然后B可直接使用,而不是在onStop里。

更多相关文章

  1. Android(安卓)Audio - 支持多个APK同时录音
  2. 开发Android第三步,签名证书,真机安装编译程序
  3. Android(安卓)WebView优化
  4. cocos2d-x 播放视频 on Android
  5. android布局之selector(背景选择器)[转]
  6. Android跨进程通信IPC之19——AIDL
  7. android 垂直 SeekBar 源代码(VerticalSeekBar)
  8. android电量优化之Battery Historian工具使用
  9. Android(安卓)不得不知Tag的妙用

随机推荐

  1. android Recorder流程
  2. android setTag (int key, Object tag)抛
  3. Android图片轮播
  4. Android遍历获取指定目录的文件
  5. ListView与其中的Button,EditText等Widge
  6. 在ubuntu10.10上安装android sdk
  7. error:Error parsing XML:unbound prefix
  8. android开发数据存储方式
  9. android ListView的属性
  10. 【android】查看应用签名信息