java activity生命周期_Android学习之基础知识四-Activity活动6讲(体验Activity的生命周期)...

一、体验活动的生命周期的执行

代码组成:

1、三个Java类:MainActivity.java、NormalActivity.java、DialogActivity.java

2、三个布局文件:activity_main.xml、activity_normal.xml、activity_dialog.xml

3、程序入口:AndroidManifest.xml

4、创建一个过滤器:MainActivity

下面是具体代码:

MainActivity.java

1 packagecom.example.administrator.activitylifecycletest;2

3 importandroid.content.Intent;4 importandroid.support.v7.app.AppCompatActivity;5 importandroid.os.Bundle;6 importandroid.util.Log;7 importandroid.view.View;8 importandroid.widget.Button;9 importandroid.widget.Toast;10

11 public class MainActivity extendsAppCompatActivity {12 public static final String TAG="MainActivity";13 @Override14 protected voidonCreate(Bundle savedInstanceState) {15 super.onCreate(savedInstanceState);16 setContentView(R.layout.activity_main);17 Log.d(TAG,"onCreate");18 Button startNormalActivity=findViewById(R.id.start_normal_activity);19 Button startDialogActivity=findViewById(R.id.start_dialog_activity);20

21 startDialogActivity.setOnClickListener(newView.OnClickListener() {22 @Override23 public voidonClick(View view) {24 Intent intent=new Intent(MainActivity.this,DialogActivity.class);25 startActivity(intent);26 }27 });28

29 startNormalActivity.setOnClickListener(newView.OnClickListener() {30 @Override31 public voidonClick(View view) {32 Intent intent=new Intent(MainActivity.this,NormalActivity.class);33 startActivity(intent);34 }35 });36 }37

38 @Override39 protected voidonStart() {40 super.onStart();41 Log.d(TAG,"onStart");42 }43

44 @Override45 protected voidonResume() {46 super.onResume();47 Log.d(TAG,"onResume");48 }49

50 @Override51 protected voidonPause() {52 super.onPause();53 Log.d(TAG,"onPause");54 }55

56 @Override57 protected voidonStop() {58 super.onStop();59 Log.d(TAG,"onStop");60 }61

62 @Override63 protected voidonRestart() {64 super.onRestart();65 Log.d(TAG,"onRestart");66 }67

68 @Override69 protected voidonDestroy() {70 super.onDestroy();71 Log.d(TAG,"onDestroy");72 }73 }

NormalActivity.java

1 packagecom.example.administrator.activitylifecycletest;2

3 importandroid.support.v7.app.AppCompatActivity;4 importandroid.os.Bundle;5

6 public class NormalActivity extendsAppCompatActivity {7

8 @Override9 protected voidonCreate(Bundle savedInstanceState) {10 super.onCreate(savedInstanceState);11 setContentView(R.layout.activity_normal);12 }13 }

DialogActivity.java

1 packagecom.example.administrator.activitylifecycletest;2

3 importandroid.support.v7.app.AppCompatActivity;4 importandroid.os.Bundle;5

6 public class DialogActivity extendsAppCompatActivity {7

8 @Override9 protected voidonCreate(Bundle savedInstanceState) {10 super.onCreate(savedInstanceState);11 setContentView(R.layout.activity_dialog);12 }13 }

activity_main.xml

1 <?xml version="1.0" encoding="utf-8"?>

2

3 android:orientation="vertical"

4 android:layout_width="match_parent"

5 android:layout_height="match_parent">

6

7

9 android:layout_width="match_parent"

10 android:layout_height="wrap_content"

11 android:text="Start NormalActivity"/>

12

13

15 android:layout_width="match_parent"

16 android:layout_height="wrap_content"

17 android:text="Start DialogActivity"/>

18

19

activity_normal.xml

1 <?xml version="1.0" encoding="utf-8"?>

2

3 android:orientation="vertical"

4 android:layout_width="match_parent"

5 android:layout_height="match_parent">

6

7

9 android:layout_height="wrap_content"

10 android:text="This is a normal activity"/>

11

activity_dialog.xml

1 <?xml version="1.0" encoding="utf-8"?>

2

3 android:orientation="vertical"

4 android:layout_width="match_parent"

5 android:layout_height="match_parent">

6

7

9 android:layout_height="wrap_content"

10 android:text="This is a dialog activity"/>

11

AndroidManifest.xml

1 <?xml version="1.0" encoding="utf-8"?>

2

3 package="com.example.administrator.activitylifecycletest">

4

5

7 android:icon="@mipmap/ic_launcher"

8 android:label="@string/app_name"

9 android:roundIcon="@mipmap/ic_launcher_round"

10 android:supportsRtl="true"

11 android:theme="@style/AppTheme">

12

13

14

15

16

17

18

19

20 android:theme="@style/Theme.AppCompat.Dialog">

21

22

23

24

25

MainActivity过滤器:

0b7215087e0b15b25b3dc4a4303e9742.png

88354c6ae69de404b9fd151e9381a801.png

代码运行结果:

1、运行程序,打印出一下日志:创建项目的时候运行了三个方法:onCreate()、onStart()、onResume()

98b172ae018c2166cf5435b7b13d72f2.png

e884afc17dd55ac8ed909215cca4a465.png

2、点击Start NormalActivity:此时调用了两个方法:onPause()、onStop()

31c1b9c97bc05b7877047f46c563ddf1.png

a4b743d13c27ade1ba1b9daa2594fba8.png

3、点击Back键:此时调用了三个方法:onRestart()、onStart()、onResume()

cf77dae938e5ff6d2f5a45aabce13104.png

af071cacbe52348bfb8792ae779e3915.png

4、点击Start DialogActivity:DialogActivity是对话框式的活动,因此启动该活动时,只会调用onPause()方法,不会调用onStop()方法

dbae4397783378a9b1d1d3c3bffa7c5e.png

b016ffc5b4c23fa9182661a7fa1ef492.png

5、点击Back键:相应的对话框式的活动按Back键后也是只调用onResume()方法。

4f642e8cc3a0812db6a97d49143d17aa.png

64985b70d979cebe04920db98821dbcc.png

6、再次按Back退出程序后:调用了三个方法:onPause()、onStop()、onDestroy()

b2ba0d4bb3aaa3881fd152c4d6ae25a6.png

二、活动被回收后临时数据的保存(onSaveInstanceState方法)

现象描述:MainActivity活动中有一个文本输入框,现在在文本框中输入了一段文字后,没有关闭该文本输入框,然后打开活动NormalActivity,这个时候MainActivity由于系统内存不足被回收了,过了一会儿又点击Back键回到MainACtivity,发现刚刚输入的文本信息全部清空了,这是因为MainActivity被重建了。

实际需求:在NormalActivity活动回到MainActivity活动后,我们需要之前的数据保留下来。

问题解决:Activity类提供了一个onSaveInstanceState()方法,这个方法保证活动在被回收前一定调用,我们可以通过这个方法来解决活动被回收时临时数据得不到保存的问题。

保存临时数据:

在MainActivity.java(有临时数据的活动)中添加如下代码:

1d64ce579b16c7fb4bc021f678c41587.png

获取临时数据:

修改MainActivity.java(有临时数据的活动)中onCreate()方法中的代码:下面通过Log来打印出那些临时数据的。

f8e763e84e5dfb4735fcd6469f28c202.png

拓展:

使用Bundle来保存和取出数据,与Intent传递数据基本类似。Intent可以结合Bundle一起用于传递数据:

思路:先把数据保存在Bundle对象中,在把Bundle对象放在Intent里。到了目标活动后,先从Intent中取出Bundle,再从Bundle中一一取出数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值