Activity 学习笔记

来源:互联网 发布:arduino编程软件 编辑:程序博客网 时间:2024/05/16 01:05
1、Activity 生命周期交互

1)Aactivity 启动Bactivity

Aactivity                             Bactivity

(Aactivity 先启动)
onCreate()
onStart()
onResume()

(Aactivity启动Bactivity)
onPause()
                                        
                                             onCreate()
                                             onStart()
                                             onResume()
onStop

2)Bactivity单击back键

 Aactivity                               Bactivity

                                               onPause()
 onRestart()
 onStart()
 onResume()
                                                 onStop())
                                                 onDestroy()

2、Activity横竖屏切换

1)切换时销毁整个Activity再横屏启动Activity
2)在onSaveInstanceState(Bundle state)中保存状态
3)在onCreate(Bundle state)中取出状态

3、Activity的两种启动方式
1)直接启动
Intent intent = new Intent(this,NewActivity.class);
或者
Intent intent = new Intent();
ComponentName component = new ComponentName(this,NewActivity.class);
intent.setComponent(component);
startActivity(intent);

2)匿名启动
新建的Activit在Manifest.xml中配置action(“www.myactivity.com”)和category;
Intent intent = new Intent();
intent.setAction("www.myactivity.com");
startActivity(intent);

4、Task
查看任务栈Task的cmd 命令(Windows系统)
adb shell dumpsys activity 查看activity任务栈

5 、Lauch mode 启动模式
1)standard  
不管Activity是否已经在任务栈中,都会实例化一个新的对象。
如A-B-C-D,在D中再启动D,A-B-C-D-D
2)singleTop
如有任务栈 A-B-C-D,D已经在栈顶,如果再启动D,只会调用D的onNewInstance()方法,如果不在栈顶则会重新
创建。
3)singleTask
如有任务栈 A-B-C-D,如果要启动B,会执行B的onNewInstance 方法,并把B上面的C和D 关闭,将B带到前台,如果B已经在前台,则只执行onNewInstance。
4)singleInstance
有两个Activity,MainActivity(standard)和 FisrtActivity (singleInstance)。
启动顺序Main-First-First-Main-First-Main,得到如下两个任务栈。

  任务栈Task1                  任务栈Task2
                                          
    main
    main
    main                              frist

启动FirstActivity会创建新的任务栈。
如果FirstActivity已经启动,不会重新初始化,只会执行FirstActivity的onNewInstance();

如果First启动Main,会创建新的Main实例在Main当前所在的任务栈中。
如果现在Main是在前台(如上),关闭的顺序是Main-Main-Main-First,即首先关闭当前在前台的Activity所在的栈的所有Activity,再关闭其他任务栈中的Activity。
如果First在前台,关闭顺序First-Main-Main-Main。

1 0