Activity | 青训营笔记
写在前面
这是我参与「第四届青训营 」笔记创作活动的第1天
该笔记为之前断断续续的笔记片段和大项目之后的笔记的整合,复习一些基本知识和在项目中遇到的问题。如有不妥之处,还望予以指正。
知识梳理
Activity 的生命周期
Activity 的生命周期如下图所示(图片来自掘金社区)
总共有10个与Activity生命周期有关的函数:onCreate()、onStart()、onResume()、onPause()、 onStop()、onRestart()、onDestory()、onSaveInstanceState()、onRestoreInstanceState()、onCreate()
但 Android 会自动管理 Activity 的生命周期,所以在这里,我只记录我在开发过程中接触的较多的部分,如,onCreate()、onStart()、onResume()、onRestart()、onDestory()。至于其他,我基本没用过也不好过多讨论。
Activity 最先会经历:被 onCreate() 创建,被 onStart() 调用使其对用户可见,之后一直处于 onResume() 互动状态。
以下就是 onCreate() 的初始代码,我们可以在其中添加相应的代码,来实现我们想要在这一阶段里面想要 Activity 做的事情。若没有,则直接调用父类的方法即可,onStart() 和 onResume() 同理。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
当我们准备离开或者已经离开当前 Activity 时 onPause()、 onStop() ,Android 会依次调用两个方法,让当前的 Activity 冻结,将资源更多的倾斜向新的 Activity 。(图片来自掘金社区)
新的 Activity 完成其周期后,会调用原 Activity 的 onRestart() 使其重新运行,之后再次执行 onCreate()、onStart()、onResume()。并且新的 Activity 会销毁 onDestory() 。
Activity 的启动模式
由于学之尚少,这部分只做了解,不过多深究。在开发过程中,我们是一个 MainActivity 和多个 Fragment,用 SingleInstance 会更好吗?可能吧,但没有特别的需求, Standard 已经足够了。
Standard:标准模式,默认启用的模式,每次激活Activity时都会创建Activity,并放入任务栈中。
SingleTask:栈内复用,栈内已经有该Activity的实例,就重用该实例,并使其返回栈顶,否则在栈顶创建该Activity的实例。
SingleTop:栈顶复用,栈顶存在该Activity的实例, 就重用该实例,否则在栈顶创建该Activity的实例。
SingleInstance:单例模式,在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。
遇到的问题
Activity 未找到
某次修改完 Activity 的名称并移动到另一个包后,在运行程序时报错显示未找到该 Activity。
查看AndroidMainfest.xml 后发现,在修改 Activity 时,该文件内绑定的 Activity 的所在包未及时更新。将包名 .xxx 改为Activity所在包 .xxx.xxx 后,成功运行。
Activity 未设置为 MAIN
某次在独立的包下编写完新的 Activity 代码后,忘记设置新的 Activity 为APP入口,在 AndroidMainfest.xml 中将目标 Activity 的 action 设置为 MAIN 即可。
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>