Android的Activity组件

一,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获取的默认值。

猜你喜欢

转载自2914905399.iteye.com/blog/2330818