目录
1.activity生命周期
(下图源网络)
由图可知,activity生命周期包含7种方法。
onCreate():表示activity正在创建。我们可以在此方法完成一些初始化工作。此方法含有参数Bundle savedInstanceState,用 于恢复activity异常情况下被销毁时保存的信息。
onStart():表示activity正在启动。这时activity已经可见,但不在前台,还无法与用户交互。
onResume():此时activity可见,在前台,可交互。
onPause():表示activity正在停止。可做数据存储,停止动画等不太耗时的操作。
onStop():表示activity即将停止。可做稍微重量级的回收操作,如取消网络连接,但不能太耗时。
onDestroy():表示activity即将销毁。这是activity生命周期最后的回调,可做资源释放和一些回收工作。
onRestart():表示activity重新启动。activity由后台切换到前台,由不可见到可见。
activity根据具体情况调用不同的方法,下面是一些activity生命周期切换的情况。
注意:①当A活动启动B活动时,先执行A活动的onPause(),再执行B活动的oncreate(),onStart(),onResume(),再执行A的onStop()。返回时,先执行B的onPause(),再执行A的onRestart(),onStart(),onResume(),再执行B的onStop(),onDestroy().
②当活动打开新活动而不被完全覆盖不可见时,只调用onPause()方法,不会调用onStop().(例如新活动为透明主题)
当activity在异常情况下被终止时,系统会调用 onSaveInstanceState()来保存activity的状态,这个方法调用在onStop()前,与onPause()无既定先后顺序。activity被重新创建后,系统会调用onRestoreInstanceState()方法,并将onSaveInstanceState()保存信息通过Bundle对象作为参数传给onRestoreInstanceState()方法和onCreate()方法。onRestoreInstanceState()调用在onStart()之后。
2.activity的启动方式
activity一共有4种启动方式:Standard,SingleTop,SingleInstance,SingleTask。有两种指定方式,第一种可通过AndroidMenifest 指定。
<activity android:name=".MainActivity"
android:launchMode="singleTask">
第二种可通过在Intent设置标志位指定。
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
当两种方式同时指定时,以后者指定方式启动。:
①Standard:标准模式,系统默认模式。每次启动一个activity都会新建一个实例。
②SingleTop:栈顶复用模式。启动一个activity先检查是否已有实例位于任务栈顶,有则复用,调用此实例的onNewIntent(),
无则新建。(存在实例但不在栈顶依旧新建)
③SingleInstance:单实例模式。此模式的activity单独位于一个任务栈。
④SingleTask:栈内复用模式。启动一个activity时检查其任务栈内是否已存在实例(任务栈不存在时新建任务栈,新建实例), 如果存在则复用,调用其onNewIntent()方法,并将位于此实例顶部的activity出栈,把它调至栈顶。不存在则新建压入栈。
标识activity任务栈名称的属性:android:taskAfffinity。默认为应用包名。