Activity的生命周期和启动模式

来源:互联网 发布:淘宝店女店主 编辑:程序博客网 时间:2024/05/07 02:57

Chapter1 Activity的生命周期和启动模式

一 、Activity的生命周期

1.典型情况下:

onCreate() Activity正在被创建,可以做些初始化工作。

onRestart() Activity正在重新启动,一般,当当前Activity从不可见重新可见时调用。

onStart() Activity正在启动,Activity可见当时还没出现在前台,还无法与用户交互。

onResume() Activity可见,并在出现在前台。

onPause 表示Activity正在停止,正常情况下,紧接着onStop会被调用,如果在这个时候快速回到原Activity,onResume() 将被调用。 此处鲁能进行太耗时的操作,将会影响新Activity的显示(onPause()执行完,新Activity的onResume()才会执行)。

onStop() Activity即将停止,不能太耗时。

onDestroy() Activity即将被销毁,可以进行最终的回收工作与资源释放。

注意

  • 新Activity是透明主题时,旧Activity不会走onStop。
  • Activity切换时,旧Activity的onPause会先执行,然后才会启动新的Activity。
  • onStart()onResume()onPause()onStop()的区别:这两个配对分别代表不同的意义,onStart与onStop是从Activity是否可见这个角度调用的,onResume和onPause是从Activity是否显示在前台这个角度来回调的,在实际使用没其他明显区别。

2.异常情况下:
当Activity被异常终止时(如旋转屏幕),系统将调用onSavaInstanceState来保存状态。调用是在onStop之前,它与onPause没有时序关系。
当Activity被重新创建时,将调用onRestoreInstanceState(调用在onStop之后),并将onSavaInstanceState保存的Bundle对象作为参数传到onRestoreInstanceState与onCreate方法。我们可以在onRestoreInstanceState与onCreate方法中判断Activity是否被重建,并可以取出数据进行恢复。

二、Activity的启动模式

  1. standard:标准模式,默认模式。每次启动一个Activity就会创建一个新的实例。(使用ApplicationContext去启动standard模式Activity就会报错。因为sandard模式的Activity会默认进入启动它所属的任务栈,但是由于非Activity的Context没有所谓的任务栈 就出错了。)
  2. singleTop:栈顶复用模式。如果新Activity已经位于任务栈的栈顶,就不会重新创建,同时回调它的onNewIntent方法。
  3. singleTask:栈内复用模式。 单实例模式,只要Activity在一个任务栈中存在,那么就不会重新创建,系统将回调onNewIntent方法。如果不存在就会重新创建一个任务栈 并将A实例化后放入栈中。
  4. singleInstance:单实例模式。 具有此模式的Activity只能单独位于一个任务栈中。

三、IntentFilter的匹配规则

<activity android:name="com.gaop.MainActivity" android:configChanges="screenLayout"//设置在某些情况下不重新创建Activity android:lable="@string/app_name" android:launchMode="singleTask" android:taskAffinity="com.gaop.task1"//设置任务栈 <intent-filter>  <action android:name="com.gaop.c"/>    <action android:name="com.gaop.d"/>  <category android:name="com.gaop.category.c"/>  <category android:name="com.gaop.category.d"/>  <category android:name="android.intent.category.DEFAULT"/>  <data android:mimeType="text/plain"/> </intent-filter></activity>

1. action匹配规则 要Intent中的action能够与过滤规则中的任何一个相同即可匹配成功,如果没有指定action,匹配失败。
2. category匹配规则 Intent中一旦出现category就必须每个category与过滤规则中的其中一个相同,Intent中没有category也会匹配成功。
3. data的匹配规则 data由mimeType(媒体类型,如 image/jpeg )与URL组成。 规则中只有mimeType时,Intent必须是指定的mimeType。 有多组data规则时,匹配其中一组即可。

采用隐式方式启动Activity时,可以用PackageManager的resolveActivity方法或者Intent的resolveActivity方法判断是否有Activity匹配我们的隐式Intent。

1 0