这是我参与「第四届青训营 」笔记创作活动的的第2天
作者: Eric0202
前言:
学习安卓最先接触的应该就是四大组件里面的activity了, 就像学习c语言, 所有人最先接触的就是控制台
printf("hello world!");
安卓也一样, Android Studio新建一个空的工程后, 打开的可能(根据AS和初始选择的页面不同) 就是一个显示了activity的页面.
AS也有控制台, 也可以像c一样在控制台输出hello world, 显示调试信息等等. 但是页面显示可能对于很多初学者来说, 还是没有接触过的, 如果是的话, 就恭喜你, 完成了自己的第一个GUI程序.
学习activity通常最先学的就是activity生命周期. 但是作为初学者, 看到一大堆与生命周期相关的方法, 又很难记得住. 所以最简单实用的就是写一个最简洁的程序, 在控制台观察过程.
正文:
步骤:
1.
首先为我们的第一个activity写一个界面, 最好在页面上显示这个就是第一个activity, 方便后续分辨, 这里我放入了一个textview和两个button
xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_activity1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="This is activity1"
android:layout_marginTop="20dp"
android:textColor="@color/black"
android:textSize="26sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click to open baidu"
android:layout_marginTop="30dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_activity1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn2"
android:layout_marginTop="30dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn1"
android:text="click to go to activity2"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn2"
android:layout_marginTop="30dp"
android:text="this is currently empty"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
2.
然后在java文件里override生命周期的方法, 并且每个都在控制台打印当前周期, 通过log.e会打印出红色的信息error
public class MainActivity extends AppCompatActivity {
@Override
protected void onStart() {
super.onStart();
Log.e("e","activity1 on start");
}
@Override
protected void onPostResume() {
super.onPostResume();
Log.e("e","activity1 on resume");
}
@Override
protected void onStop() {
super.onStop();
Log.e("e", "activity1 on stop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("e", "activity1 on destroy");
}
@Override
protected void onPause() {
super.onPause();
Log.e("e","activity1 on pause");
}
@Override
protected void onRestart() {
super.onRestart();
Log.e("e","activity1 on restart");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("e", getClass().getSimpleName()+" activity1 on create");
}
3.
运行一次试试
2022-07-24 20:55:00.896 6798-6798/com.example.myapplication E/e: MainActivity activity1 on create
2022-07-24 20:55:00.897 6798-6798/com.example.myapplication E/e: activity1 on start
2022-07-24 20:55:00.899 6798-6798/com.example.myapplication E/e: activity1 on resume
经过以上过程activity成功运行在前台, 然后返回
2022-07-24 21:05:17.923 6798-6798/com.example.myapplication E/e: activity1 on pause
2022-07-24 21:05:18.071 6798-6844/com.example.myapplication D/EGL_adreno: eglMakeCurrent: 0xb6e898e0: ver 3 1 (tinfo 0xc7c1abe0)
2022-07-24 21:05:18.138 6798-6798/com.example.myapplication E/e: activity1 on stop
2022-07-24 21:05:18.138 6798-6798/com.example.myapplication E/e: activity1 on destroy
这就是一次正常生命周期
截图:
但是通常我们都需要在activity之间切换, 于是我们加上第二个activity, 并且为了显示方便, 换一种log打印方式
1.
编写xml, 与activity1相似就不贴上来了
2.
同上, 但是log打印改为info打印
@Override
protected void onStart() {
super.onStart();
Log.i("e","activity2 on start");
}
3.
通过activity1启动activity2并返回activity1
截图:
通过不同的颜色应该可以看的比较清楚, 两个activity之间切换时的生命周期变化, 每次在前台(栈顶)的activity都是onResume状态, 切换下一个时先pause, 然后下一个被置于栈顶onResume.
自己写完代码运行一遍会比只看一眼别人的教程记得清楚很多, 教程里面这仅仅是 几个单词几个箭头 就能全部表示完. 但是自己操作一下才能比较清楚的认识.
2022年7月24日