zoukankan      html  css  js  c++  java
  • 四大组件-活动

    活动

    活动(Activity),是一个应用组件,用于显示界面并用户进行交互。

    1.活动的启动模式

    分为四种启动模式,分别是 "standard"、"singleTop"、"singleTask"、"singleInstance"、

    我们需要在清单文件中标签中的 android:launchMode 属性来配置启动模式,如

    <activity android:name=".SecondActivity" android:launchMode="standard" />
    

    (1) standard

    这个是默认启动模式。

    以这种方式启动活动每次都会创建一个新的实例。

    创建的活动都会入栈,并处于栈的顶端位置。

    (2)singleTop

    当启动活动时发现栈顶端已经是该活动,则直接使用该活动,并调用该实例的onNewIntent()方法向其传送Intent,而不会再创建新的活动实例。 如果该活动不是在栈顶位置时,则还是会创建新的实例。

    (3)singleTask

    以这种方式启动活动,每次系统都回去返回栈中检查是否存在该活动的实例,如果已经存在则直接使用该实例,并把这个活动之上的所有活动都出栈。如果没有发现则会创建一个新的实例。

    (4)singleInstance

    指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动。

    保证无论从那个Task启动Activity都这会创建一个Activity实例,并将它假如到新的Task 栈顶。

    2.活动的生命周期

    activity_lifecycle.png

    1. 当创建一个活动MainActivity:
    08-30 14:54:13.745 3154-3154/? D/MainActivity: onCreate: 
    08-30 14:54:13.745 3154-3154/? D/MainActivity: onStart: 
    08-30 14:54:13.745 3154-3154/? D/MainActivity: onResume: 
    
    1. 当从MainActivity 跳转到 SecondActivity
    08-30 14:57:44.429 3154-3154/com.tiger.intenttest D/MainActivity: onPause: 
    08-30 14:57:44.454 3154-3154/com.tiger.intenttest D/SecondActivity: onCreate: 
    08-30 14:57:44.454 3154-3154/com.tiger.intenttest D/SecondActivity: onStart: 
    08-30 14:57:44.455 3154-3154/com.tiger.intenttest D/SecondActivity: onResume:
    08-30 14:57:45.078 3154-3154/com.tiger.intenttest D/MainActivity: onStop: 
    

    3.从SecondActivity通过Back键返回到 MainActivity

    08-30 14:59:53.554 7583-7583/com.tiger.intenttest D/SecondActivity: onPause: 
    08-30 14:59:53.556 7583-7583/com.tiger.intenttest D/MainActivity: onRestart: 
    08-30 14:59:53.556 7583-7583/com.tiger.intenttest D/MainActivity: onStart: 
    08-30 14:59:53.556 7583-7583/com.tiger.intenttest D/MainActivity: onResume: 
    08-30 14:59:53.883 7583-7583/com.tiger.intenttest D/SecondActivity: onStop:
    08-30 14:59:53.883 7583-7583/com.tiger.intenttest D/SecondActivity: onDestroy: 
    

    3.保存和恢复Activity 状态

    比如说有这样一个情况,在MainActivity中有一个EditText,你已经输入的了数据,然后你跳转到SecondActivity中,过了一会由于系统内存不足,MainActivity被回收,那么当我们再返回到MainActivity中时会再创建一个新的ManActivity,我们在EditText输入的内容也会消失。

    这时候我们就用到了 onSaveInstanceState() onRestoreInstanceState()

    • onSaveInstanceState()

    这个方法在活动被回收之前一定会调用。

    通常来说,跳转到其他activity或者是点击Home键都会执行该方法。 还有就是当:锁屏、屏幕方向切换

    Activity可以用键值对集合来保存状态信息。这个方法会默认实现保存有关Activity视图层次的状态信息,例如EditText中的文本,或者ListView的滚动位置。

        @Override
        protected void onSaveInstanceState(Bundle outState) {
            Log.d(TAG, "onSaveInstanceState: ");
            outState.putString("data_key",et.getText().toString());
            super.onSaveInstanceState(outState);
        }
    
    • onRestoreInstanceState()

    这个方法只有在活动确实被系统销毁后,才会执行。 另外也可以写在onCreate()方法中,不过需要判断下savedInstanceState是否为Null。

        @Override
        protected void onRestoreInstanceState(Bundle savedInstanceState) {
            Log.d(TAG, "onRestoreInstanceState: ");
            if(savedInstanceState!=null){
              et.setText(savedInstanceState.getString("data_key"));
            }
            super.onRestoreInstanceState(savedInstanceState);
        }
    

    更多请参考:

    https://developer.android.com/training/basics/activity-lifecycle/recreating.html

    https://developer.android.com/guide/components/activities.html

    文章部分内容摘自网络和图书,如有侵权,请联系我。
  • 相关阅读:
    j函数 判断以 什么开头
    vue 自定义封装组件 使用 model 选项
    学习旧岛小程序 (3)组件的样式
    JavaScript事件处理程序的3种方式
    常用的JS页面跳转代码调用大全
    JS基础知识:Javascript事件触发列表
    详解JavaScript中的事件处理
    常用的JavaScript字符串处理函数及用法
    如何利用CSS代码使图片和文字在同一行显示且对齐
    利用DIV+CSS制作网页过程中常用的基本概念及标签使用细节
  • 原文地址:https://www.cnblogs.com/-Tiger/p/7449174.html
Copyright © 2011-2022 走看看