•返回栈
Android 中的活动是可以叠层的,我们每启动一个新的活动,就会覆盖在原活动之上,
然后点击 Back 键会销毁最上面的活动,下面一个活动就会重新显示出来;
其实 Android 是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack);
栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置;
•活动的状态
- 运行状态
•活动的生存期
Activity 类中定义了七个回调方法,覆盖了活动生命周期的每一个环节;
onCreate()
onStart()
onResume()
onPause()
onStop()
onDestroy()
onRestart()
完整生存期
可见生存期
前台生存期
活动生命周期示意图
•体验活动的生命周期
准备工作
新建一个项目,命名为 ActivityLifeCycleTest,并选择 Empty Activity;
进入项目,将模式结构改成 Project 结构;
接下来,我们需要额外新建两个 Empty Activity;
右击 com.example.activitylifecycle -> New -> Activity -> Empty Activity ;
新建的两个 Activity 分别命名为 normalActivity 和 DialogActivity;
接下来就是敲代码的环节了;
activity_normal.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="this is a normal activity" android:textSize="20sp" android:layout_centerInParent="true"/> </RelativeLayout>activity_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="this is a dialog activity" android:textSize="20sp" android:layout_centerInParent="true"/> </RelativeLayout>通过代码可以看出,这两个布局文件的代码几乎没有区别,只是显示的文字不同;
其实从名字上可以看出,这两个 Activity 一个表示普通活动,一个表示对话框活动;
但我们并没有对 .java 文件任何修改,在哪里体现出 DialogActivity 为对话框活动呢?
别着急,下面我们马上开始配置;
打开 AndroidManifest.xml 文件;
有没有发现什么不一样的?
没错,在 .DialogActivity 的配置中;
通过使用 android:theme="@style/Theme.AppCompat.Dialog" 将 DialogActivity 设置成对话框形式的主题;
接下来,我们修改 activity_main.xml 中的布局;
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" android:orientation="vertical"> <Button android:id="@+id/btn_1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Start normal Activity" android:textAllCaps="false"/> <Button android:id="@+id/btn_2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Start Dialog Activity" android:textAllCaps="false"/> </LinearLayout>可以看到,在该布局中加入了两个按钮;
btn_1 用于启动 normalActivity,btn_2 用于启动 DialogActivity;
MainActivity.java
public class MainActivity extends AppCompatActivity { public static final String TAG = "MainActivity"; private Button btn1; private Button btn2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG, "onCreate: "); btn1 = findViewById(R.id.btn_1); btn1.setonClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,normalActivity.class); startActivity(intent); } }); btn2 = findViewById(R.id.btn_2); btn2.setonClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,DialogActivity.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 onRestart() { super.onRestart(); Log.d(TAG, "onRestart: "); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy: "); } @Override protected void onStop() { super.onStop(); Log.d(TAG, "onStop: "); } }在 onCreate() 方法中,分别为两个按钮注册了点击事件,用于启动 normalActivity 和 DialogActivity;
然后在 Activity 的 7 个回调方法中分别打印一句话,这样我们就可以通过观察日志的方式来更直观的理解活动的生命周期;
有关 Log 的用法,请参考我的这篇博客
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。