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

代码组成:

  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

 package com.example.administrator.activitylifecycletest;

 import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; public class MainActivity extends AppCompatActivity {
public static final String TAG="MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG,"onCreate");
Button startNormalActivity= findViewById(R.id.start_normal_activity);
Button startDialogActivity= findViewById(R.id.start_dialog_activity); startDialogActivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,DialogActivity.class);
startActivity(intent);
}
}); startNormalActivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,NormalActivity.class);
startActivity(intent);
}
});
} @Override
protected void onStart() {
super.onStart();
Log.d(TAG,"onStart");
} @Override
protected void onResume() {
super.onResume();
Log.d(TAG,"onResume");
} @Override
protected void onPause() {
super.onPause();
Log.d(TAG,"onPause");
} @Override
protected void onStop() {
super.onStop();
Log.d(TAG,"onStop");
} @Override
protected void onRestart() {
super.onRestart();
Log.d(TAG,"onRestart");
} @Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG,"onDestroy");
}
}

NormalActivity.java

 package com.example.administrator.activitylifecycletest;

 import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; public class NormalActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_normal);
}
}

DialogActivity.java

 package com.example.administrator.activitylifecycletest;

 import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; public class DialogActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
}
}

activity_main.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <Button
android:id="@+id/start_normal_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start NormalActivity"/> <Button
android:id="@+id/start_dialog_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start DialogActivity"/> </LinearLayout>

activity_normal.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="This is a normal activity"/>
</LinearLayout>

activity_dialog.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="This is a dialog activity"/>
</LinearLayout>

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.activitylifecycletest"> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".NormalActivity" />
<activity android:name=".DialogActivity"
android:theme="@style/Theme.AppCompat.Dialog">
</activity>
<!--android:theme是设置活动的主题,上面是将活动设置成了对话框式的活动-->
</application> </manifest>

MainActivity过滤器:

代码运行结果:

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

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

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

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

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

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

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

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

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

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

保存临时数据:

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

获取临时数据:

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

 拓展:

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

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

Android学习之基础知识四-Activity活动6讲(体验Activity的生命周期)的更多相关文章

  1. Android学习之基础知识四-Activity活动3讲(Intent的使用)

    主活动名称FirstActivity.java改为了MenuTest.java 一.什么是Intent: 1.Intent是Android程序中各组件之间进行交互的重要方式,不仅可以指明当前组件想要进 ...

  2. Android学习之基础知识四-Activity活动5讲(Activity的生命周期)

    一.返回栈 1.Android是通过任务(Task)来管理活动,一个任务就是一个返回栈内所有活动的集合. 2.返回栈是一个后进先出的数据结构,每启动一个新的活动,该活动就会覆盖原来的活动,位于栈顶位置 ...

  3. Android学习之基础知识四-Activity活动2讲

    一.在活动(activity)中添加Toast显示: 1.Toast作用:Android系统提供的一种非常好的提醒方式,将一些短小的信息提供给用户,这些信息会在一段时间后自动消失,不会占用任何屏幕空间 ...

  4. Android学习之基础知识四-Activity活动7讲(活动的启动模式)

    在实际的项目开发中,我们需要根据特定的需求为每个活动指定恰当的启动模式.Activity的启动模式一共有4种:standard.singleTop.singleTask.singleInstance. ...

  5. Android学习之基础知识四-Activity活动1讲

    一.活动(Activity)的基本用法: 1.手动创建活动FirstActivity(java源码): A.Android Studio在一个工作区间只允许打开一个项目,点击:File--->C ...

  6. Android学习之基础知识四-Activity活动8讲(活动的灵活运用)

    一.判断当前是在哪个活动 1.我们还是接着上一讲的代码,首先创建一个Java类:BaseActivity.java.这个类我们不作为一个活动,也不在AndroidManifest.xml中注册,它只是 ...

  7. Android学习之基础知识四-Activity活动4讲(Intent传递数据)

    Intent除了可以开启一个活动,还能在启动活动的时候传递数据,此时Intent相当于一个保存数据的库,我们先把数据保存在Intent中,然后再根据各个activity的需要从其中取出数据.  一.使 ...

  8. Android学习之基础知识七—碎片的使用

    碎片(Fragment)是一种可以嵌入在活动中的UI片断,它能让程序更加合理和充分地利用大屏幕的空间,它与活动相似,可以简单的理解为一个迷你型的活动,它也有自己的生命周期.碎片在平板的应用非常广泛. ...

  9. Android学习之基础知识十六 — Android开发高级技巧的掌握

    一.全局获取Context的技巧 前面我们很多地方都使用到了Context,弹出Toast的时候.启动活动的时候.发送广播的时候.操作数据库的时候.使用通知的时候等等.或许目前来说我们并没有为得不到C ...

随机推荐

  1. CSS如何让不相等的字符上下对齐

    最后效果: <div class="main"> <span style="font-size:12px;"><dl class= ...

  2. 2017-10-29 用中文命名API的意义和途径

    "中文编程"知乎专栏原链 在前文对在代码中使用中文命名的质疑与回应中阐述了在代码中使用中文命名的益处. 此文将从软件使用者的角度阐述对API中文化的意义并探讨实现途径. 当然, 文 ...

  3. React Native中Mobx的使用

    从今天开始我们来搞搞状态管理可否,这几天没怎么写博客,因为被病魔战胜了,tmd,突然的降温让我不知所措,大家最近注意安全,毕竟年底了,查的严,呸,大家注意保暖 特别声明:写该文只是写一下用MobX的思 ...

  4. 最全最新的opencv版本下载

    opencv和opencv_contrib版本都可以到这个github下载 包括编译好的vc14和vc15window版本 还有源码版,可以自行cmake

  5. WebGIS中利用AGS JS+eCharts实现一些数据展示的探索

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 eCharts提供了迁徙图.热点图.夜视图等跟地图能够很好的 ...

  6. loadrunner 运行脚本-Run-time Settings-Browser Enmulation设置详解

    运行脚本-Run-time Settings-Browser Enmulation设置详解 by:授客 QQ:1033553122 浏览器模拟 所有Internet Vuser Header包含一个标 ...

  7. 《Inside C#》笔记(四) 类

    类是对数据结构和算法的封装. 一 类成员 类成员包括以下几类,作者在后面的章节会详细讲解. 字段(用来保存数据,可用static readonly const来修饰).方法(操作数据的代码).属性(用 ...

  8. TCP连接之报文首部

    在面试时,会经常被问到TCP报文的一些细节,可以说TCP报文是不少企业用来考察面试者对网络的掌握程度的一道题目. TCP连接作为网络传输的一个环节,是不可或缺的一部分.例如,OSI七层模型的应用层HT ...

  9. Jenkins的配置从节点中默认没有Launch agent via Java Web Start,该如何配置使用

    Jenkins的配置从节点中默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 1:打开" ...

  10. Tell Me About Yourself Example 1

    Tell Me About Yourself Employers ask this question because they want to know you have the relevant e ...