有死之荣,无生之辱。每天早上几乎十点才能坐在这里学习,罪恶罪恶
昨天学校停电,我认为是不能算的,今天其实算是day03
昨天也是没有学习,今天算是day04
记录一下,今天是day05,有些东西真的是很难理解啊,但是这个第二章只剩一点了,没必要再起一个博客了,继续写完吧。
复习:昨天学习了如何创建了空的activity,然后如何加入组件,在活动项目中加入显示空间,在AndroidManifest注册,和一些Toast,Menu,finish的小操作。
那么继续学习新的2.3
intent作用是让一个活动跳转到另一个活动上,Intent分为显式
2.1.1使用显式Intent
Intent intent =new Intent(FirstActivity.this,SecondActivity.class);
startActivities(new Intent[]{intent});
第一个参数传入自身的类,第二个参数传入想要跳转的类。
使用这种方式启动活动的意图非常明显,称为显式
2.1.2使用隐式Intent
指定一系列抽象的action和category然后交由系统来判断分析Intent,来找出合适的活动去启动。
这个感觉没法写啊,现在理解也理解不深,等以后再深入补吧。
2.2.1 返回栈
大意就是APP的运行模式是栈式的,系统总是会显示栈顶的活动给用户。
2.2.2 活动状态
运行状态 -> 暂停状态 -> 停止状态 -> 销毁状态
运行状态: 处于返回栈栈顶
暂停状态:不在栈顶但可见
停止:不在栈顶并不可见
销毁:移除出返回栈
2.2.3 活动生存周期
onCreate()。在活动第一次被创建时使用
onStart()。活动由不可见变可见
onResume()。活动准备和用户进行交互的时候调用,此时处于运行状态。
onPause()。准备去启动或恢复另一个活动时调用。这个方法会将一些CPU资源释放掉以及保存一些关键数据。
onStop()。在活动完全不可见的时候调用,它和Pause方法的区别在于如果启动的新活动是对话框式的活动,那么pause方法就会执行,stop不会执行。
onDestroy()。活动在完全销毁之前调用,活动状态会变为销毁状态。
onRestart()。这个活动由停止状态变成运行状态之前调用,活动被重新启动了。
3种生存期
1、完成生存期,关于方法Create、Destroy,Create完成各种初始化操作,Destroy完成内存释放的操作。
2、可见生存期,关于方法Start、Stop,在可见生活期,活动总是对用户可见的,即便是可能不与用户进行交互,通过这两个办法合理的管理用户可见的资源,
3、前台生存期,Resume和Pause方法,活动总是处于运行状态,
2.2.4 实验生命周期
代码在AppLifeCycle里,没什么可说的,但是有一点值得说,为了完成onPause,需要进行一个dialog框的处理,Android studio中在AndroidManifest.xml里的设置主题为@android:style/Theme.Dialog,程序崩溃了。将主题设置为android:theme="@style/Theme.AppCompat.Dialog"能够解决此问题
2.2.5 活动被回收了怎么办
问题描述:在活动A基础上打开活动B,然后因为内存不足,自动回收掉了活动A,当你再返回活动A时,打开的是onCreate而不是onRestart。
Activity提供了一个onSaveInstanceState()回调方法,这个方法可以保证在活动被回收之前一定被调用,储存一些信息,携带一个Bundle类型参数
2.2.6活动的启动模式
需要特定的需求来给每个活动指定恰当的启动模式,一共为4种,分别是standard,singleTop,singleTask,singleInstance。通过指定android:launchMode
standard:假设活动A的基础上再打开活动A,会进行覆盖,就是再创建一个A,但这并不符合正常使用情况。说白了它不在意返回栈中是否有这个活动,只要有活动就创建。
singleTop:这个启动模式开始检测返回栈的栈顶,假设活动A在栈顶,那么就不会再创建一个新的A,但是这个模式有一个缺点,就是如果活动A基础上打开一个活动B,那么再在活动B上打开活动A就会产生新的活动A,然后再在新活动A上打开活动B,会产生新的活动B。
singleTask:这个就比较奇怪了,意思说一下吧,就是新开一个活动A,先看看返回栈内有没有已经存在的活动A,如果没有直接入栈,然后再打开活动B,B也是先检查返回栈内有没有已经存在活动的B,如果没有直接入栈,然后此时再打开活动A,它检查到之前栈内有已经存在的活动A,那他就把活动B也出栈,然后Restart活动A。
singleInstance:这个是最奇怪的,意思就是这个启动模式的会自己独享一个返回栈
加油,干完这个
2.3.1你在当前的哪个活动?
书上的方法是新建一个类,然后继承AppCompatActivity,然后重写onCreate方法,多加一个获取当前实例的类名。让其他活动继承这个新类。
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
Log.d("BaseActivity",getClass().getSimpleName());
}
}
2.3.2随时随地退成程序
你在一个返回栈里有多个活动,想一个个返回最后关闭很慢,解决方法:新建一个ActivityCollector作为管理类。
2.3.3启动活动的最佳写法