相信大家在学习的过程中都考虑Activity生命周期,
如果一味的任由activity默认启动模式的话,
那么在activity来回跳转的时候,就会开启好多个activity,
这样在无形中浪费了好多内存,
所以,这时候就给activity设置了启动模式。
设置时候只需要在AndroidManifest.xml里对应的<activity>标签里设置
android:launchMode="singleTop"属性,例如:
下面就是我给设置的singleTop模式
<activity android:name=".MainActivity" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Activity的四种启动模式:
standard:这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。 //简单的说 这个就是一个劲的往上放 有多少放多少
singleTop: 如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。 //其实这个就是上一次打开的Activity如果还活着的话还在最顶层就会被重用,否则新建
singleTask:如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。//如果以前有了则拿出来用 没有就新建
singleInstance:在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。
至于什么是栈,如果这个还不懂的话就先理解为存放Activity的容器。
下面来讲一下Activity的生命周期
如下图
在Activity中有7个与生命周期相关的方法。
onCreated()是activity第一次被启动时执行的,主要是初始化一些变量,
onStart()是activity界面被显示出来的时候执行的;
onResume()是当该activity与用户能进行交互时被执行;
onPause()是另一个activity被启动,当前的activity就被暂停了,一般在该函数中执行保存当前的数据;
onStop()表示另一个activity被启动完成时,当前activity对用户同时又完全不可见时才调用的;
onDestroy()是退出当前activity时调用的,当然如果程序中调用finish()或者说android系统当前资源不够用时就会被调用。
onRestart()是当前activity重新被启动时调用的;绑定一些监听器等;
这写生命周期是需要记下来的,要是一回记不住的话,多写几回就记住了
当用多个activity在执行时,这时候android系统会自动将这些activity压入栈中并且总是显示最顶的那个activity,这个栈在android叫做task,但是这个栈只支持压入和弹出操作,不支持排序插入等操作。
Activity的7个生命周期函数中的onStop()函数被调用时是在其对应的activity被另外的activity完全遮挡的时候,如果只有部分遮挡,则不会被调用。部分遮挡一般是以消息activtiy的形式出现,这个只需在AndroidManifest.xml中将其对于的activity的主题设置theme中更改即可。
这7个周期函数,当系统资源不够时,其中onPause(),onStop(),onDestroy()是有可能被系统kill掉的,但其它4个是不会被kill掉。