Android基础知识整理(一) 四大组件

一、四大组件

Activity
生命周期:

在这里插入图片描述

Intent与序列化:

IntentAndroid Toast与Intent使用_z18223345669的博客-CSDN博客

序列化:

目的:

(1)永久的保存对象数据(将对象数据保存在文件当中,或者是磁盘中

(2)通过序列化操作将对象数据在网络上进行传输(由于网络传输是以字节流的方式对数据进行传输的.因此序列化的目的是将对象数据转换成字节流的形式)

(3)将对象数据在进程之间进行传递(Activity之间传递对象数据时,需要在当前的Activity中对对象数据进行序列化操作.在另一个Activity中需要进行反序列化操作讲数据取出)

两种实现:

1.Implements Serializable 接口 (声明一下即可)

2.Implements Parcelable 接口(不仅仅需要声明,还需要实现内部的相应方法)

启动模式和FLAG:

启动模式一共有 4 种,分别是 standardsingleTopsingleTasksingleInstance,可以在 AndroidManifest.xml 中通过给标签指定 android:launchMode属性来选择启动模式。

standard 是活动默认的启动模式,在不进行显式指定的情况下,所有活动都会自动使用这种启动模式。每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用 standard 模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。

singleTop在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。

singleTask每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。

singleInstance 模式的活动会启用一个新的返回栈来管理这个活动。程序中有一个活动是允许其他程序调用的,实现其他程序和我们的程序可以共享这个活动的实例。

Intent的常用Flag参数:

FLAG_ACTIVITY_CLEAR_TOP:例如现在的栈情况为:A B C D 。D此时通过intent跳转到B,如果这个intent添加FLAG_ACTIVITY_CLEAR_TOP 标记,则栈情况变为:A B。如果没有添加这个标记,则栈情况将会变成:A B C D B。也就是说,如果添加了FLAG_ACTIVITY_CLEAR_TOP标记,并且目标Activity在栈中已经存在,则将会把位于该目标activity之上的activity从栈中弹出销毁。这跟上面把B的Launch mode设置成singleTask类似。

FLAG_ACTIVITY_NEW_TASK:例如现在栈1的情况是:A B C。C通过intent跳转到D,并且这个intent添加了FLAG_ACTIVITY_NEW_TASK 标记,如果D这个Activity在Manifest.xml中的声明中添加了Task affinity,并且和栈1的affinity不同,系统首先会查找有没有和D的Task affinity相同的task栈存在,如果有存在,将D压入那个栈,如果不存在则会新建一个D的affinity的栈将其压入。如果D的Task affinity默认没有设置,或者和栈1的affinity相同,则会把其压入栈1,变成:A B C D,这样就和不加FLAG_ACTIVITY_NEW_TASK 标记效果是一样的了。 注意如果试图从非activity的非正常途径启动一个activity,比如从一个service中启动一个activity,则intent比如要添加FLAG_ACTIVITY_NEW_TASK 标记。

FLAG_ACTIVITY_NO_HISTORY:例如现在栈情况为:A B C。C通过intent跳转到D,这个intent添加FLAG_ACTIVITY_NO_HISTORY标志,则此时界面显示D的内容,但是它并不会压入栈中。如果按返回键,返回到C,栈的情况还是:A B C。如果此时D中又跳转到E,栈的情况变为:A B C E,此时按返回键会回到C,因为D根本就没有被压入栈中。

FLAG_ACTIVITY_SINGLE_TOP:和上面Activity的 Launch mode的singleTop类似。如果某个intent添加了这个标志,并且这个intent的目标activity就是栈顶的activity,那么将不会新建一个实例压入栈中。

问题:

1.什么是 Activity?

四大组件之一 , 一般的 , 一个用户交互界面对应一个 activity ,setContentView() 显示布局

activity 是 Context 的子类 , 同时实现了 window.callback 和 keyevent.callback, 可以处理与窗体用户交互的事件 。

2.请描述一下 Activity 生命周期。

生命周期描述的是一个类 从创建 (new 出来 ) 到死亡 ( 垃圾回收 ) 的过程中会执行的方法

在这个过程中 会针对不同的生命阶段会调用不同的方法Activity 从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法包括: oncreate() ondestroy() onstop() onstart() onresume() onpause() 其实这些方法都是两两对应的,

onCreate 创建与 onDestroy 销毁;onStart 可见与 onStop 不可见; onResume可编辑(即焦点)与 onPause;

onRestart 方法在 Activity 被 onStop 后,但是没有被 onDestroy ,在再次启动此 Activity 时就调用 onRestart (而不再调用 onCreate )方法;如果被 onDestroy 了,则是调用 onCreate 方法。

3.两个 Activity 之间跳转时必然会执行的是哪几个方法。

一般情况比如说有两个 activity, 分别叫 A,B , 当在 A 里面激活 B 组件的时候 , A 会调用onPause() 方法 , 然后 B 调用 onCreate() ,onStart(), OnResume() , 这个时候 B覆盖了窗体 , A会调用 onStop() 方法 .

如果 B呢 是个透明的 , 或者是对话框的样式 , 就不会调用 onStop() 方法 . 对话框的话也不会调用 Onpause() 方法 . 因为对话框也是Activity 的一部分 . 不等于失去焦点 .

4.横竖屏切换时候 Activity 的生命周期。

不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期默认首先销毁当前 activity, 然后重新加载

onPause onStop onDestory onCreate onStart onResume

5.你后台的 Activity 被系统回收怎么办?如果后台的 Activity 由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

除了在栈顶的 activity, 其他的 activity 都有可能在内存不足的时候被系统回收 , 一个activity 越处于栈底 , 被回收的可能性越大

// 当系统回收时会调用下面的方法 可以将应用的状态保存在这个方法中

protected void onSaveInstanceState(Bundle outState);

// 恢复现场

public void onCreate(Bundle savedInstanceState) ;

6.如何退出 Activity ?如何安全退出已调用多个 Activity 的 Application ?

退出 activity 直接调用 finish () 方法 .

用户点击 back 键 就是退出一个 activity 退出 activity 会执行 onDestroy() 方法 .

1、抛异常强制退出

2、记录打开的 Activity 每打开一个 Activity ,就记录下来。在需要退出时ÿ

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leisure-ZL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值