美文网首页
Android学习笔记(1)-四大组件之Activity

Android学习笔记(1)-四大组件之Activity

作者: 非典型程序猿 | 来源:发表于2020-02-20 16:23 被阅读0次

Android的四大组件Activity,Service,Broadcast,Content Provider想必大家都不陌生了,今天在这里给大家详解一下Activity的相关知识点。

应用的主活动

在AndroidMainfest清单文件中,我们可以将一个活动设置为应用启动的默认主活动,也就是进入这个应用的入口。可在application标签中,将你需要设置的activity的对应标签中的intent-filter元素声明中将action设置为如下代码.

<action android:name="android.intent.action.MAIN">

四种启动方式

在AndroidMainfest清单文件里我们可以在activity标签内设置android:launchMode来进行启动方式的设置,四种启动方式分别如下:

标准模式(standard)

standard是系统默认的启动方式,以这种方式启动的activity会在任务栈中直接创建一个新的实例,不管之前在任务栈中有没有重新创建.

栈顶复用模式(singleTop)

singleTop正如其名,当新启动的activity已经存在于任务栈栈顶,那么就不会再创建新的实例,而是直接调用onNewIntent()方法,如果不存在于任务栈栈顶,那么就重新创建一个实例加入任务栈中。

栈内复用模式(singleTask)

singleTask正如其名,当新启动的activity已经存在于任务栈中,那么就不会再创建新的实例,而是直接调用onNewIntent()方法,并且关闭这个activity之上的任务栈中的activity,举例如果按顺序打开了A-B-C三个页面,那么以此种方式启动B,就会将C出栈,并且调用B的onNewIntent()方法,如果不存在于任务栈中,那么就重新创建一个实例加入任务栈中.(ps:之前笔者开发过程中就因为主页的启动方式是singleTask,导致了某一个bug把主页给出栈了,因此启动方式的了解是非常重要的 !!!)

单例模式(singleInstance)

这种启动方式比较特别,以这种方式启动的activity会单独运行于一个任务栈中,这个任务栈只会存在它一个实例。

打开一个Activity

打开activity采用Intent的方式,可以通过给Intent设置Bundle对象来传递你想要传递给下一个界面的值,但在日常开发中activty可能会复用,这样传值会导致前后打开的页面耦合度太高,容易造成空指针的问题,因此不建议采用Bundle的方式向下一个页面,最好采用其他方式,例如以将一些公共数据利用SharedPreference存储。代码如下:

Intent intent= new Intent(ActivityA.this,ActivityB.class);//通过Intent的Flag设置
intent.addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

生命周期

一个完整的Activity的生命周期包含了以下方法。

onCreate()

onStart()

onResume()

onPause()

onStop()

onRestart()

onDestroy()

两个Activity切换时的生命周期变化

A切换到B

A:onCreate() -- onStart() -- onResume() -- onPause()

B:onCreate -- onStart() -- onResume()

A:onStop() -- onStop() 方法只会在A不可见时调用,如果透明可见则不调用

B返回到A(按下返回键)

B:onPause()

A:onRestart() -- onStart() -- onResume()

B:onStop() -- onDestroy()

Activity的知识点就暂时总结到这个地方啦。

相关文章

网友评论

      本文标题:Android学习笔记(1)-四大组件之Activity

      本文链接:https://www.haomeiwen.com/subject/wsbxqhtx.html