前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android-活动的生命周期(二)

Android-活动的生命周期(二)

作者头像
博博1998
发布2022-04-25 15:39:33
3650
发布2022-04-25 15:39:33
举报
文章被收录于专栏:博博blog

体验活动生命周期 主活动:MainActivity, 子活动:NormalActivity和DialogActivity。 两个子活动分别加入一个TextView, 然后在AndroidManifest.xml内配置DialogActivity的主题。

代码语言:javascript
复制
</activity>
<activity android:name=".NormalActivity" />
<activity android:name=".DialogActivity"
    android:theme="@style/Theme.AppCompat.Dialog">
</activity>

使用了android:theme属性,用于给当前活动指定主题的,这里用的,android:theme="@style/Theme.AppCompat.Dialog" 让DialogActivity使用对话框式的主题。

修改主活动的布局和代码,加入两个按钮,分别用于启动NormalActivity和DialogActivity。 然后重写Activity的7个回调方法,分别打印相应的语句。

代码语言:javascript
复制
@Override
protected void onStart(){
    super.onStart();
    Log.d(TAG,"onStart");
}

以此类推重写。 观察活动的生命周期 启动时

1.png
1.png

依次执行onCreate(),onStart(),onResume()。 点击第一个按钮启动NormalActivity,

2.png
2.png

由于NormalActivity把MainActivity完全遮挡,因此onPause()和onStop()方法都得到执行。

按下Back返回MainActivity

3.png
3.png

由于之前MainActivity进入停止状态,所以onRestart()执行,又会依次执行onStart()和onResume(),但onCreate()不会执行。

点击第二个按钮,启动DialogActivity

4.png
4.png

onPause()执行,onStop没有执行,因为DialogActivity没有完全遮挡MainActivity,只是进入暂停状态, 相应按下Back,也只有onResume()方法得到执行。

5.png
5.png

按下Back退出程序

6.png
6.png

依次执行onPause(),onStop(),onDestroy()方法,最终销毁MainActivity。

活动被回收怎么办 当一个活动进入停止状态,有可能被系统回收,那么当有一个活动A,在A基础上启动了活动B,A进入停止状态,这时由于系统内存不足,A被回收掉,这时按下Back键还是会正常显示A,但是不会执行onRestart(),而是执行A的onCreate()方法。 但是A中可能存有临时数据,这样数据也会丢失。Activity提供了一个onSaveInstanceState()回调方法,这个方法保证活动在被回收之前一定会被调用。 onSaveInstanceState()携带了一个Bundle类型参数,提供了一系列的方法保存数据,比如可以使用putString()方法保存字符串,使用putInt()方法保存整型数据,每个保存方法需要传入两个参数, 第一个参数是键,用于后面从Bundle中取值, 第二个参数是真正要保存的内容, 在MainActivity添加以下代码,将临时数据保存:

代码语言:javascript
复制
@Override
protected void onSaveInstanceState(Bundle outState){
    super.onSaveInstanceState(outState);
    String tempData = "Something you just typed";
    outState.putString("data_key",tempData);
}

数据保存了,一直使用的onCreate()方法也有个Bundle类型参数,这个参数一般情况下都是null,但是如果活动被系统回收之前有通过onSaveInstanceState()方法保存数据的话,这个参数就会带有之前保存的全部数据,只需要通过相应的取值方法将数据取出即可,修改MainActivity的onCreate()方法,

代码语言:javascript
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG,"onCreate");
    setContentView(R.layout.activity_main);
    if (savedInstanceState != null){
        String tempData = savedInstanceState.getString("data_kay");
        Log.d(TAG,tempData);
    }
    ......
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档