android开发笔记 | 日志跟踪理解 activity 生命周期
乐果 发表于 2024 年 04 月 07 日 标签:android
因公司技术应用的需要,今年准备为自己增加一门技能:安卓开发。
今天在 ubuntu
系统环境下,把 Android Studio
编辑器安装好了,
同时也安装了java sdk 8
……
开发环境
ide 安装: Android Studio 下载
jdk8 安装:华为镜像
可以选择去 Orical
官网下载,但官网下载实在是太慢了,所以选择用华为镜像。
sudo tar -xvzf ./jdk-8u151-linux-x64.tar.gz -C /opt/java
添加环境变量,把下面两行添加到 /etc/profile
:
export JAVA_HOME=/opt/java/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH
kotlin
现在的 android
开发跟十年前已经有很大区别,2017年谷歌公司将 kotlin
语言作为
android
开发的主要语言,现在越来越多的应用开始转向 kotlin
或 kotlin
与 java
混合模式开发。
作为新手,建议买一本书籍熟悉一下,例如我买了人民邮电出版社(图灵)的这本:Android编程权威指南(第4版) ,有需要电子版的可以私下向我索要。
activity 生命周期
这几天学习过程中,发现安卓的开发跟现在的前端开发比较像,组件化、事件驱动等。
android
的每个 Activity
实例都有其生命周期。在其生命周期内,activity
在
运行、暂停、停止和不存 在这四种状态间转换。每次状态转换时,都有相应的 Activity
函数发消息通知 activity
。
上图显示了 activity
的生命周期、状态以及状态切换时系统调用的函数。
内存中是否有 activity
实例、用户是否可见、是否活跃在前台(等待或接受用户输入中),看图中的各种状态就知道了。
不存在(Nonexistent) 表示某个 activity
还没启动或已销毁(例如,用户按了回退键)。因为已销毁这个可能状态,所以不存在状态有时被称为已销毁状态。此时,内存里没有这个 activity
实例,也没有用户可见或可交互的关联视图。
停止(Stopped) 表示某个 activity 实例在内存里,但用户在屏幕上看不到关联视图。在某个 activity
刚开始出现前作为瞬间状态存在,但在 activity
的关联视图被完全遮挡时又重现该状态(例如,用户启动另一个用户可见的全屏 activity
,点击 Home
键,或者使用预览界面切换任务)。
暂停(Paused) 表示某个 activity
处于前台非活动状态,关联视图可见或部分可见。如果用户启动一个新的对话框形式,或者透明的 activity
在某个 activity
之上,我们就说该 activity
处于部分可见状态。一个 activity
也可能完全可见,但并不处于前台,比如用户在多窗口模式(又叫分屏模式)下同时查看两个 activity
。
运行(Resumed) 表示某个 activity
实例在内存里,用户完全可见,且处于前台。用户当前正与之交互。设备上有很多应用,但是,任何时候只能有一个 activity
处于能与用户交互的运行状态。这也意味着,如果某个 activity
进入继续运行状态,那么其他 activity
可能正在退出运行状态。
Activity
的子类可以在 activity
的生命周期状态发生关键性转换时完成某些工作。
这些函数通常被称为生命周期回调函数。
我们已熟悉这些生命周期回调函数中的 onCreate(Bundle?)
。
在创建 activity
实例后,但在此实例出现在屏幕上之前,Android
操作系统会调用该函数。通常,通过覆盖 onCreate(Bundle?)
函数,activity
可以预处理以下 UI
相关工作:
- 实例化部件并将它们放置在屏幕上(调用 setContentView(Int));
- 引用已实例化的部件;
- 为部件设置监听器以处理用户交互;
- 访问外部模型数据。
切记,千万不要自己去调用 onCreate(Bundle?)
函数或任何其他 activity
生命周期函数。
为通知 activity
状态变化,你只需在 Activity
子类里覆盖这些函数,Android
会适时调用它们(看当前用户状态以及系统运行情况)。
日志跟踪理解 activity 生命周期
Android
的 android.util.Log
类能够向系统级共享日志中心发送日志信息。
Log
类有好几个日志记录函数。
本书用得最多的是以下函数:
public static Int d(String tag, String msg)
- d 代表“debug”,用来表示日志信息的级别。
- 第一个参数是日志的来源;
- 第二个参数是日志的具体内容。
该函数的第一个参数值通常以类名传入。
这样,就很容易看出日志信息的来源。
在 MainActivity.kt
中,为 MainActivity
类新增一个 TAG
常量,如代码:
import ...
private const val TAG = "MainActivity"
class MainActivity : AppCompatActivity() {
...
}
接下来,在 MainActivity
类的 onCreate(Bundle?)
之后,覆盖其他五个生命周期函数,如代码:
class MainActivity : AppCompatActivity() {
...
override fun onCreate(savedInstanceState: Bundle?) {
...
}
override fun onStart() {
super.onStart()
Log.d(TAG, "onStart() called")
}
override fun onResume() {
super.onResume()
Log.d(TAG, "onResume() called")
}
override fun onPause() {
super.onPause()
Log.d(TAG, "onPause() called")
}
override fun onStop() {
super.onStop()
Log.d(TAG, "onStop() called")
}
override fun onDestroy() {
super.onDestroy()
Log.d(TAG, "onDestroy() called")
}
private fun updateQuestion() {
...
}
...
}
乐果 发表于 2024 年 04 月 07 日 标签:android