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

1.Activity的概念与Activity的生命周期图:

Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作, 比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口, 而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方!

2,Activity生命周期中所涉及到的回调函数(我们不能够去主动调用):

 public class Activity extends ApplicationContext {

//onCreate()必须重写,必须调用 setContentView() 加载界面布局
     protected void onCreate(Bundle savedInstanceState);  

     protected void onStart();

     protected void onRestart();

     protected void onResume();

//表示离开当前界面,注意不总是意味这销毁界面
     protected void onPause();

     protected void onStop();

     protected void onDestroy();
 }

整个生命周期(entire lifetime):在onCreate() 与 onDestory()之间,在onCreate()中获取所需的资源,在onDestory()中释放所有占有的资源。

可见生命周期(visible lifetime): 在onStart() 与 onStop()之间,在这期间可以拥有所有资源,例如可以在onStart() 中注册广播,可以在onStop()中注销广播。

前台生命周期(foreground lifetime):在onResume() 与 onPause()之间,在这期间当前activity占据屏幕,处于正在与用户交互的状态,当设备休眠或者其他活动获取焦点时onPause()会被调用。由于可能会高频率的切替状态,所以这两个回调函数中尽量不要有太多逻辑处理。

3.Activity的创建流程

4, 启动activity的方式

1)  startActivity(intent)

intent中可显式的指定具体要启动的activity,也可以指定action动作。

2) startActivityForResult(intent, requestCode)

启动一个activity并返回信息。源activity调用startActivityForResult(intent, requestCode)启动目的activity,并重写onActivityResult(int requestCode, int resultCode,  Intent  data)方法,以接收处理返回的数据信息;目的activity通过setResult(int resultCode,  Intent data)来返回数据信息供onActivityResult()处理(setResult()之后一般会调用finish()方法来结束目的activity)。

requestCode:标记调用源,例如同一个activity的两个button点击会启动同一个目的activity, 但是所执行的动作不一样,此时就需要requestCode来区别动作源。

resultCode:标记结果返回动作。

5,关闭Activity

通过调用finish()方法来结束一个activity。

activity1通过startActivityForResult()方法启动activity2时,可以在activity1中调用finishActivity(int requestCode)来结束activity2。

6,Activity的四种加载模式

7,Activity的状态保存

当activity被暂停或者停止的时候,它所有的信息和状态是被保留的,因为此时的activity对象还被保存在内存中。当该activity返回前台时,之前的信息和状态还可以恢复。然而,当系统清理内存时,其中的activity对象也就被销毁了,如果此时想保存activity的信息和状态该怎么办呢?----可以重写回调方法:onSaveInstanceState() (具体用法不作描述。),此时重建的时候会调用onRestoreInstanceState()。

onSavedInstanceState()和onRestoreInstanceState()并不是activity生命周期的方法。

onSaveInstanceState()会在onPause()或onStop()之前执行,onRestoreInstanceState()会在onStart()和onResume()之间执行。

当应用遇到意外情况(内存不足,用户直接按home键)由系统直接销毁一个Activity时,onSaveInstanceState()就会调用,但是当用户主动销毁activity,如按back键,或直接执行finish(),这种情况下onSaveInstanceState()就不会执行,因为这种情况下,用户的行为决定了不需要保存Activity的状态。

那么onRestoreInstanceState()会跟onSaveInstanceState()成对出现吗?  答案是不会成对出现,onSaveInstanceState()需要调用的时,activity可能销毁,也可能没有销毁,只有在activity销毁重建的时候onRestoreInstanceState()才会调用。

在onSaveInstanceState()中默认情况下具体干些什么?

默认情况下默认会自动保存Activity中的某些状态,比如activity中各种UI的状态,因此在activity被“系统”销毁和重建的时候,这些Ui的状态会默认保存,但是前提条件是Ui控件必须制定id,如果没有指定id的话,UI的状态是无法保存 的。

activity中保存数据有两种方式onPause(),onSaveInstance(bundle),  恢复数据也有两种途径onCreate(Bundle), onRestoreInstanceState(budle),默认情况下onSaveInstanceSate()和onRestoreInstanceState()会对UI状态进行保存和恢复,如果需要保存其他数据可以在onSaveInstanceState(),onPause()保存,但是如果是持久化的数据得通过onPause()保存(google推荐)。(上述摘自《onSavedInstanceState()和onRestoreInstanceState()理解》

        横竖屏切替的时候会销毁当前的Activity然后重新创建一个,其生命周期如下:
onPause-> onStop-> onDestory-> onCreate->onStart->onResume

如果这个activity有一个textview,如果想要保持这个textview的内容,只要重写onSaveInstanceState(bundle outState)方法,往这个bundle中写入数据,比如:

outState.putInt("num",1);

这样,然后你在onCreate(bundle savedInstanceState)或者onRestoreInstanceState(bundle savedInstanceState)中就可以拿出里面存储的数据,不过拿之前要判断下是否为null:

savedInstanceState.getInt("num");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值