一、Android中Activity的生命周期
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
//本章节探讨Activity的生命周期
class LifecycleActivity : AppCompatActivity() {
private val TAG = "LifecycleActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
/***此处初始化数据和布局,但是不可以在主线程做耗时过长的任务
* 否则会造成界面卡顿,严重会使程序ANR、OOM(程序崩溃)
* ANR、OOM这两个后续在讲解
* **/
Log.d(TAG, "Activity创建方法")
}
override fun onStart() {
super.onStart()
/***不可以在主线程做耗时过长的任务
* 否则会造成几面卡顿,严重会使程序ANR、OOM(程序崩溃)
* 界面创建好了,但是用户不可以见
* **/
Log.d(TAG, "Activity启动回调方法")
}
override fun onRestart() {
super.onRestart()
/***不可以在主线程做耗时过长的任务
* 否则会造成几面卡顿,严重会使程序ANR、OOM(程序崩溃)
* 界面重新创建时候的回调
* **/
Log.d(TAG, "ActivityRestart回调方法")
}
override fun onResume() {
super.onResume()
/*** 这个时候用户可见界面时候的回调* */
Log.d(TAG, "Activity渲染或者恢复方法")
}
override fun onPostResume() {
super.onPostResume()
/**
* 这个时候用户可见界面时候的回调,在onResume执行完成后的回调
* */
Log.d(TAG, "Activity渲染-恢复,结束的回调方法")
}
override fun onPause() {
super.onPause()
/**
* 当前界面可见部分时候的回调,
* 不可以在主线程做耗时过长的任务,
* 否则会造成几面卡顿,严重会使程序ANR、OOM(程序崩溃)
* 如果启动新界面,在这里Ui线程(主线程)耗时任务,会影响到新界面的渲染速度
* 一般常在这里处理资源处理,比如停止动画效果等
* */
Log.d(TAG, "Activity-暂停方法")
}
override fun onStop() {
super.onStop()
/**
* 当前界面不可见时候的回调,
* 不可以在主线程做耗时过长的任务,
* 否则会造成几面卡顿,严重会使程序ANR、OOM(程序崩溃)
* 如果启动新界面,在这里Ui线程(主线程)耗时任务,会影响到新界面的渲染速度
* 一般常在这里处理资源处理,比如停止动画效果等
* */
Log.d(TAG, "Activity-停止方法")
}
override fun onDestroy() {
super.onDestroy()
/*** 一般常在这里处理资源处理,清除动画,释放资源* */
Log.d(TAG, "Activity-界面即将销毁回调方法")
}
}
如果我们封装的一个类,需要感知activity的生命周期,这个类在相关生命周期处理部分逻辑,我们需要怎么处理呢。
我们来建立MyLifecycleUtils让这个类继承DefaultLifecycleObserver,并在Activity的onCreate()方法添加对这个类的生命周期回调。两行代码搞定:
val myLifecycleUtils = MyLifecycleUtils()
lifecycle.addObserver(myLifecycleUtils) // lifecycle就是getLifecycle()
二、Android Fragment的生命周期
package com.tmg.project.fragment
import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
class LifecycleFragment : Fragment() {
private val TAG = "LifecycleFragment"
override fun onAttach(context: Context) {
super.onAttach(context)
Log.d(TAG,"此处是Fragment与Activity绑定的时候回调")
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
Log.d(TAG,"此处是创建View的回调")
return super.onCreateView(inflater, container, savedInstanceState)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
/**此处View创建完成的回调**/
Log.d(TAG,"此处View创建完成的回调")
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
/*** 此处我们就可以做初始化数据处理了* ***/
Log.d(TAG,"绑定的Activity创建好了的回调")
}
/**以下方法同Activity的基本相似***/
override fun onStart() {
super.onStart()
}
override fun onPause() {
super.onPause()
}
override fun onResume() {
super.onResume()
}
override fun onDestroy() {
super.onDestroy()
}
/**以上方法同Activity的基本相似***/
/***
* 需要单独处理, 监听Fragment的生命周期同Activity基本一致
* 不过你需要在你的类单独写一个方法,在onDestroyView()中去调用它,这就是与监听Activity生命周期的区别
* ****/
override fun onDestroyView() {
super.onDestroyView()
Log.d(TAG,"这是移除布局View的回调,在这里我们就可以释放资源等处理。")
}
//结束与Activity的绑定
override fun onDetach() {
super.onDetach()
Log.d(TAG,"结束与Activity的绑定")
}
}
Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。
三、鸿蒙开发的生命周期和界面跳转
参见:https://blog.csdn.net/d312697510/article/details/137819277