Activity的使用及生命周期探索


生命周期探索请直接移步 标题 10.

1.概述:

提供能够 ②与用户交互的 ①界面

2.组件的特点:

  1. 继承父类或实现接口
  2. 需要注册
  3. 对象,是系统创建的
  4. 生命周期方法的自动调用

3.如何声明一个Activity.

  1. 继承;
  2. 重写 onCreate() 等;
  3. 注册;
  4. 布局;

4.如何启动一个Activity.

  1. startActivity(intent)

  2. startActivityForResult

    Activity1:startActivityForResult(int requestCode,Intent intent)
    Activity2:setResult(int resultCode,Intent intent);	
    finish();
    Activity1: onActivityResult(int requestCode,int resultCode,Intent intent)
    

5.Intent的使用:

Intent不是组件!意图,提供不同组件通信的信使。

  1. 要去哪?
    显式意图Intent(obj,Class clazz),隐式意图Intent(String action)

  2. 能带数据吗?
    可以!不过这里的 finish() 不要忘;忘了的话也没关系……那你就按 back 键,不还是 finish() 嘛……

putExtra(String key,Xxx xxx)---getXxxExtra(String key)
setData(Uri uri) ---getData(); 
Uri uri = Uri.parse("tel:" + number); -->url (http:)
									("content:" + )

6.任务栈的结构:先进后出

  1. 不可以操作系统的栈结构;
  2. 如果确实需要操作,可以参考我的 P2P金融项目 笔记 02 提供的 AppManager 类;统一应用程序中所有的Activity的栈管理

7.LaunchMode:

  1. standard ;标准模式;

  2. singleTop 适用于 目标 activity 启动费时的情况,给目标 activity 设置 singleTop ,防止用户多次点击,创建多个活动 (那不更卡了……) ;

  3. singleTask 设置为此时,任务栈里只新建一个该活动;当栈顶的活动调用该活动时,自动清空栈中,目标活动上的所有活动;

  4. singleInstance 新建一个栈单独存储;少见……

8. Activity的生命周期。

  1. 4 种状态:运行状态,暂停状态,停止状态,死亡状态。
    不同状态之间,切换时,哪些生命周期方法调用;

  2. 7 个生命周期方法。
    onCreate()— onDestroy():对象是否存在。(在对象整个生命周期过程中,只调用一次)
    onStart()— onStop():当前activity是否可见
    onResume() — onPause():当前的activity是否可操作

  3. 面试考查:
    ①Activity1–>Activity2.
    ②demo总结;

9.不同的生命周期方法中,常做哪些操作。

  1. onCreate();setContentView(),视图的初始化,绑定监听

  2. onDestroy();正常情况下,销毁一个activity对象之前调用。

  3. onPause();当activity结束运行状态时,临时数据的保存。(不适合执行数据量较大的保存操作:数据库)

  4. onSaveInstanceState() / onStop():用于保存数据(执行时间较长);onSaveInstanceState() 操作在onPause()和 onStop()之间;

10. Activity 生命周期探索

A. 普通启动第二个页面;

  1. P1首先不可操作,onPause()

  2. 而后P2创建;可视;可操作;

  3. 最后P1才不可见;onStop()

    MainActivity onPause()
    SecondActivity onCreate()
    SecondActivity onStart()
    SecondActivity onResume()
    MainActivity onStop()
    
  4. 在P2通过返回键;返回到P1;此时P1调用 onRestart() 或 onCreate()取决于是否 finish(),不过通过 返回键的最后,P2会 onDestroy;

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

B. 带回调启动第二个页面;

  1. 从P1携带信息去P2时;这里的 onSaveInstanceState() 在 onStop() 之前执行;这也就决定了,在什么时候写数据保存操作;

    MainActivity onPause()
    SecondActivity onCreate()
    SecondActivity onStart()
    SecondActivity onResume()
    MainActivity onSaveInstanceState()
    MainActivity onStop()
    
  2. 从P2携带信息回到 P1时;这里的重中之重是;P1的onActivityResult() 先 onResume() 执行; 以确保重新显示的时候,之前的数据已经恢复;

     SecondActivity onPause()
     MainActivity onActivityResult()
     MainActivity onRestart()
     MainActivity onStart()
     MainActivity onResume()
     SecondActivity onStop()
     SecondActivity onDestroy()
    

C. 启动 DialogActivity

  1. dialog 出现在最上层,P1 可见,不可操作;依次执行的是;

    MainActivity onPause()
    MainActivity onSaveInstanceState()
    
  2. 返回到 P1

    MainActivity onResume()
    

D. 启动 AlertDialog

  1. 效果如下:
    在这里插入图片描述

  2. 但是 P1毫无波澜;
    在这里插入图片描述

  3. 这是因为,AlertDialog 是 P1 的一部分;所以P1的生命周期没有改变;

    代码如下,当启动 DialogActivity 时,启动的是另外一个 Activity;当启动 AlertDialog 时;传入的 参数是 “this”;并且此处也只能是 this;所以 P1 生命周期不改变;

    public void startDialogActivity(View v) {
        startActivity(new Intent(this, DialogActivity.class));
    }
    public void startDialog(View v) {
        new AlertDialog.Builder(this)
                    .setTitle("测试")
                    .setPositiveButton("确定", null)
                    .setNegativeButton("取消", null)
                    .show();   
    }
    

11. 熄屏下的生命周期

  1. 熄灭屏幕;先是不可操作,随后是不可见;二者之间时保存数据;

    MainActivity onPause()
    MainActivity onSaveInstanceState()
    MainActivity onStop()
    
  2. 点亮屏幕;此时没有 onActivityResult() ;这个方法需要三个参数:onActivityResult(int requestCode, int resultCode, Intent data)

     MainActivity onRestart()
     MainActivity onStart()
     MainActivity onResume()
    

12. 横竖屏

  1. 解决横竖屏造成的 activity 生命周期方法重新调用:

    <activity
                android:name=".MainActivity"
                android:configChanges="keyboardHidden|screenSize|orientation" />
    

声明:本博客根据尚硅谷项目实战: 硅谷金融.学习整理;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章