68

Android-保你能记住的生命周期教程

 5 years ago
source link: https://tryenough.com/android-lifecycle?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

先看一下官方给出的图:

RbyyEfq.png!web

总结一下上图

主要的 回调方法 包括:

onCreate 、onStart 、onResume 、onPause 、onStop 、onDestroy 、onRestart

给出一张方便记忆的图:

vaAjyei.png!web

这些方法都是两两对应的:

1.onCreate创建与onDestroy销毁;

2.onStart可见与onStop不可见;

3.onResume可编辑(即焦点)与onPause;

4.onRestart:在Activity被onStop后,但是没有被onDestroy,在再次启动此Activity时就调用onRestart(而不再调用onCreate)方法;如果被onDestroy了,则是调用onCreate方法。

保存数据必须在onPause方法中进行

通过 滑动卡片 删除应用杀死进程的时候,或者通过 应用管理 杀死进程的时候,只有栈里面的第一个没有销毁的activity执行ondestroy方法,一般都是mainActivity,其它activity均不执行ondestroy。

Android什么时候只会调用onPause()而不会调用onStop()?

onPause是失去焦点,onStop是不可见时调用,只要Activity失去了焦点还可见就会只调用onPause不调用onStop,常见是translucent(半透明) activity挡住当前Activity。

网上很多人说弹出Dialog时只会调用onPause()而不会调用onStop(),其实是错误的说法,原因是必须使Activity离开前台才会调用onPause,也即是退出栈顶。但是Dialog并不会使Activity离开栈顶。所以答案应该是此时既不会调用onPause()也不会调用onStop()。

onStop不调用的场景

我们知道,Activity A打开B,流程是这样的:

 onCreateA – onStartA – onResumeA – onPauseA – onCreateB – onStartB – onResumeB – onStopA 

然后按返回到A的流程是这样的:

 onPauseB – onStartA – onResumeA – onStopB – onDestoryB 

但是如果在B打开的生命周期方法onResume中直接finish当前的B,那么此时返回到A的流程就会缺少onStartA。原因是因为此时对于系统来说A一直是可见的。

 onPauseB – onResumeA – onStopB – onDestoryB 

热度: 3


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK