安卓开发-Activity的生命周期+任务栈

《一:生命周期函数》

1:函数调用:

1.1.onCreate:  界面新出现时被调用
1.2.onStart:   界面可见时被调用
1.3.onResume:  界面可见,并且能 获取焦点(操作)时被调用。

1.4.onRestart: 当一个已经不可见的页面,返回可见时,再start之前被调用

1.5.onPause:  界面可见,但无法 获取焦点(操作)时被调用
1.6.onStop:    界面不可见时被调用
1.7.onDestory: 界面被销毁时被调用    

2:转换界面时调用函数顺序:

2.1.打开一个界面:   onCreate->onStart->onResume   先创建,再可见,再可操作
2.2.关闭一个界面:       onPause->onStop->onDestory    先暂停,再不可见,再销毁
2.3.打开一个不透明界面:  onPause->onStop         先暂停,再不可见
2.4.返回不透明界面:     onRestart->onStart->onResume   先restart(重新准备可见),再可见,再恢复可操作


2.5.打开一个透明的界面:     onPause(因为原界面可见,故不再调用onStop)
2.6.从透明界面返回:        onResume(因为原界面可见,故不用嗲用onStart)

3:生命周期类型:

3.1:整个生命周期
onCreate()-->onStart()-->onResume()-->运行在最前端-->onPause()-->onStop()-->onDestory()
3.2:可见生命周期
onPause()-->onStop()-->onRestart()-->onStart()-->onResume()
3.3:前台生命周期
onPause()-->onResume();

4:在AndroidManifest:

将界面配置成透明的
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"

5.1:在Activity中配置(消除横竖屏,屏幕大小,键盘隐藏对Activity生命周期的影响):

    <!-- 告诉系统忽略掉 【屏幕大小变化,横竖屏切换,键盘被隐藏】 的时候对Activity生命周期的影响 -->
    android:configChanges="screenSize|orientation|keyboardHidden"
    <!-- 横竖屏切换对Activity生命周期的影响,强制屏幕初始时为 横屏(landscape),竖屏(portrait) -->
    android:screenOrientation="landscape"

5.2:横竖屏切换生命周期方法执行顺序:

onPause->onStop->onDestory->onCreate->onStart->onResume

6:Activity生命周期图:
这里写图片描述

《二:短信的草稿保存》
正常关闭退出Activity后,调用onDestotry(protected),刚打开调用onCreate.

6.1.在onDestory中:

        //1.得到分享属性对象
        SharedPreferences sp = getSharedPreferences("draft", MODE_PRIVATE);
        //2.得到编辑器
        Editor edit = sp.edit();
        //3.将EditText中的值放进编辑器中
        String people = mPeopleEt.getText().toString();
        if(hasLength(people) ){
            edit.putString("people", people);
        }
        //4.提交编辑器
        edit.commit();

6.2.在onCreate中:

        //1.得到分享属性对象
        SharedPreferences sp = getSharedPreferences("draft", MODE_PRIVATE);
        //2.得到分享属性中的键值对,若值默认返回为空字符串
        String people = sp.getString("people", "");
        //3.将值回显到Edit中
        if(hasLength(people)){
            mPeopleEt.setText(people);
        }

《二:任务栈》

在AndroidManifest.xml中Activity的配置中:

    android:launchMode="standard"  :
                                    默认的启动方式

    android:launchMode="singleTop" :
                                    当前栈顶若等于即将入栈的元素,则不允许入栈。
                                    应用于手机卡屏重复点击避免打卡多个相同界面。

    android:launchMode="singleTask":
                                    当打开属性为singleTask的Activity时,先判断
                                    Activity是否在栈内存在,不存在则创建;如果存在,
                                    则要判断该Activity上面有其他的Activity,如果有,
                                    则直接关闭其他的Activity.应用于应用的主页。
                                    (从A界面一路打开界面,若在远方的某个界面要返回到A界面,则
                                    直接返回到A界面并关闭沿途界面)

      android:launchMode="singleinstance":
                                     如果没有创建就创建一个容器把AC放进去,并把自己的容器提前。
                                     如果AC存在,再次启动此AC,仅仅把自己的容器提前,
                                      此时如果有新的AC被启动,其他的容器会提前,并在
                                      提前的容器中添加该新的AC.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值