Activity

来源:互联网 发布:黄岩深孔钻编程招聘 编辑:程序博客网 时间:2024/06/03 15:18

Activity
1、什么是activity
四大组件之一,一般的,一个用户交互界面对应一个activity
Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能。它是 android 应用程序的基本功能单元。
setContentView() // 要显示的布局
activity 是Context的子类,同时实现了window.callback和keyevent.callback, 可以处理与窗体用户交互的事件. 因此 Activity 可以响应和处理用户与窗口的交互事件,以及键盘相关的输入事件;
如果界面有共同的特点或者功能的时候,可以自定义一个BaseActivity继承Activity来实现想要的功能。
2、activity的生命周期
其实对于Activity最重要的就是搞清楚它的各个生命周期函数,只有这样才能知道Activity在各个生命周期阶段需要做什么事,那些事不适合做,
Activity的生命周期按顺序一共分为:
onCreate(被创建) onstart(界面可见) onResume(获得焦点)
onPause(失去焦点) onstop(界面不可见) ondestroy(被销毁)
还有一个在Activity被onStop后,但是没有被onDestroy,在再次启动此Activity时就调用onRestart(而不再调用onCreate)方法;

1,onCreate()方法在Activity整个生命周期中只会调用一次,所以该方法中就可以做一些大致只需要做一次的工作,如:一些变量的初始化,资源的加载,初始化控件以及事件的绑定等;{onCreate()的官方文档注释,建议 setContentView()、findViewById() 在 onCreate() 中调用,但在onStart()中调用 setContentView()、findViewById() 功能也是正常的,只是不建议,并且很少会这样做;}
2,onStart()因为该方法是Activity重新回到前台时第一个回调的方法,因此在该方法里我们可以去检查某些必须的系统特性是否可用,比如网络是否在连接, GPS是否打开等类似的功能;
该方法中我们通常初始化一些变量,当然这些变量必须是在Activity处于前台的时候才能够被响应;

3,onResume()获得焦点如果Activity是重新打开,此时就需要在该方法中重新实例化在onPause()中释放的资源;

4,onPause()
该方法中需要持久化用户数据、停止动画,暂停正在播放的视频等不太耗时的操作;
释放部分占用的系统资源(尤其是独占设备),如:相机, GPS等,设置有时会让该Activity断开网络连接,因为这些工作会大幅度占用系统资源,增加电耗或者流量消耗;

5,onStop()
耗时的清理工作应该放在onStop方法中;
Activity 在此状态时仍然存在于内存中,如果在系统内存不够时,系统接下来很快会销毁掉该Activity,在极端情况下,直接 kill Activity 且不执行onDestroy()函数。所以务必在onStop()函数中就清理掉可能引起内存泄露的资源,当然更极端的时系统内存已严重不足,导致系统无法保留该进程的情况下,onStop() 可能都不会被执行;

6,onDestroy()
Activity即将被销毁,
很多情况下 Activity 是不需要定义这个函数,因为在onPause()和onStop()中,大多数的清理工作都已经完成了。但是,如果在onCreate()中定义了后台线程,或者可能引起内存泄露的代码,那就需要在onDestroy()中清理,如,静态对象持有其他Activity的引用,广播注销等操作;
官方图:

3、activity的启动模式
当我们多次启动同一个Activity时,系统会创建多个实例,并把它们按照先进后出的原则一一放入任务栈中,当我们按back键时,就会有一个activity从任务栈顶移除,重复下去,直到任务栈为空,系统就会回收这个任务栈。但是这样以来,系统多次启动同一个Activity时就会重复创建多个实例,这种做法显然不合理,为了能够优化这个问题,Android提供四种启动模式来修改系统这一默认行为。
standard、singleTop、singleTask、singleInstance
Standard–默认模式:

原创粉丝点击