一,Activity:
一个Activity通常就是一个单独的屏幕。
每创建一个Activity都必须在androidManifest.xml配置文件中声明。
Activity和Activity之间通过Intent通信,包括跳转。
Activity通过栈来管理,Activity的跳转及存储遵循栈先进先出的特点。屏幕显示的Activity总是处于栈顶,程序的初始界面处于栈底。
二,Activity的四种基本状态:
1,Active,是完全呈现给用户的界面,此时Activity处于栈最顶端。
2,Paused, 仍然可见,但是已经失去焦点,不可交互。 被一个透明Activity或者Dialog样式的Activity覆盖。
3,Stopped, 完全失去焦点,完全被另一个Activity覆盖。
4,Killed, 没有启动或者被系统杀死。
三,Activity的生命周期:
1,onCreate: 创建(每个Activity必须实现)
2,onStart:界面可见
3,onRestart:Activity重新启动
4,onResume:界面可以交互
5,onPause:界面暂停,开始失去焦点(在stop之前)
6,onStop:界面完全不可见
7,onDestory:销毁
举例:
第一个Activity启动:
onCreate() -> onStart() -> onResume
第一个Activity跳转到第二个Activity:
onPause()(第一个) -> onCreate()(第二个) -> onStart()(第二个) -> onResume()(第二个) -> onStop()(第一个)
按返回键后:
onPause()(第二个) -> onRestart()(第一个) -> onStart()(第一个) -> onResume()(第一个) -> onStop()(第二个) -> onDestory()(第二个)
四,Activity的四种加载方式:
在androidManifest.xml中配置Activity时可以设置,属性为launchMode。
1,standard:标准模式,每次跳转到另一个Activity都会创建一个新实例。
2,singleTop:如果之前已经创建过这个Activity的实例,就不会再次创建另一个新的Activity,而是直接调用newInstance()来入栈。
3,singleTask:会在一个新的task中产生这个实例。每次再使用该Activity时,都会使用该Activity,不会再去创建新的。
4,singleInstance:与singleTask基本一样。只有一个区别:在這个模式下的Activity实例所处的task中,只能有這个activity实例,不能有其他的实例。
五,Activity之前的简单通信:
使用Intent装取信息。
Intent intent = new Intent(xxxxx.this, xxxxx.class); Bundle bundle = new Bundle(); bundle.putString("string", "I am a String"); bundle.putInt("int", 20); bundle.putBoolean("boolean", true); intent.putExtra("key", bundle); startActivity(intent);
其中xxxx.this中的xxxx为需要跳转到另一个界面的Activity,xxxx.class的xxxx为跳转的Activity。
创建Bundle保存信息,每个信息都有一个key,bundle存入intent时,也需要一个key。
下面是在另一个Activity中的读取:
Intent intent = getIntent(); Bundle bundle = intent.getBundleExtra("key"); String s = bundle.getString("string"); int i = bundle.getInt("int"); boolean b = bundle.getBoolean("boolean");
上面的方法比较复杂,下面是稍简单的方法:
Intent intent = new Intent(xxxx.this, xxxx.class); intent.putExtra("string", "I am a string"); intent.putExtra("boolean", true); intent.putExtra("int", 20); startActivity(intent);
另一个界面接受结果:
Intent intent = getInten(); String s = intent.getStringExtra("string"); int i = intent.getIntExtra("int", 0); boolean b = intent.getBooleanExtra("boolean", false);
getIntExtra和getBooleanExtra中的第二个参数是如果没有这个key获取的默认值。