Android面试之Activity生命周期
来源:互联网 发布:淘宝箱包排名 编辑:程序博客网 时间:2024/05/29 03:17
在我们操作APP的时候,Activity之间会不断进行切换,其中就包含了每一个Activity的生命周期,我们就可以根据生命周期来处理不同的业务。
因此这也是面试官喜欢问到的问题。
- 简单理解Activity的生命周期
稍微看一下这图,我相信写Android的同学一定不会陌生,这张图详细地展示了Activity的不同状态以及状态的转换,看着这图我们也加点代码来理解记住,有利于我们以后怎么去描述出来什么是Activity的生命周期。
public class MainActivity extends Activity { @Bind(R.id.button) Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); Log.i("TAG", "onCreate"); } @Override protected void onStart() { super.onStart(); Log.i("TAG", "onStart"); } @Override protected void onRestart() { super.onRestart(); Log.i("TAG", "onRestart"); } @Override protected void onResume() { super.onResume(); Log.i("TAG", "onResume"); } @Override protected void onPause() { super.onPause(); Log.i("TAG", "onPause"); } @Override protected void onStop() { super.onStop(); Log.i("TAG", "onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.i("TAG", "onDestroy"); } @OnClick(R.id.button) public void jumpActivity() { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); }}
从启动Activity到退出Activity的一个完整调用周期
09-13 18:06:05.296 5265-5265/com.example.pc.myapplication I/TAG: onCreate
09-13 18:06:05.297 5265-5265/com.example.pc.myapplication I/TAG: onStart
09-13 18:06:05.297 5265-5265/com.example.pc.myapplication I/TAG: onResume
09-13 18:06:07.727 5265-5265/com.example.pc.myapplication I/TAG: onPause
09-13 18:06:07.741 5265-5265/com.example.pc.myapplication I/TAG: onStop
09-13 18:06:07.741 5265-5265/com.example.pc.myapplication I/TAG: onDestroy
管理Activity生命周期
onCreate()
-使用onCreate()初始化Activity:创建UI、绑定引用、加载数据等等。我们通常在onCreate()里面写initView()、initData()。
-如果需要创建对象,建议它们在onCreate()进行创建,因为在Activity的生命周期中它只会被调用一次。
and:onCreate()里面尽量少做事情,避免UI界面很久都加载不出来。onStart()
-Activity可见时,会调用onStart()方法- onResume()和onPause()
-用户可以获取当前Activity的焦点,Activity在处于前台状态,会调用onResume(),那就是说第一次创建的时候和当用户从onPaused()状态恢复Activity时。因此onResume()和onPause()来配合进行对组件的初始化和释放。
-当Activity仍然处于部分可见的状态,但是用户不能对这个界面进行操作的时候,会调用onPause()。
例如:
@Override public void onResume() { // TODO Auto-generated method stub super.onResume(); MobclickAgent.onResume(this); if (mMapView != null) { mMapView.setVisibility(View.VISIBLE); mMapView.onResume(); // 使百度地图地图控件和Fragment的生命周期保持一致 } } @Override public void onPause() { // TODO Auto-generated method stub super.onPause(); MobclickAgent.onPause(this); if (mMapView != null) { mMapView.setVisibility(View.INVISIBLE); mMapView.onPause(); // 使百度地图地图控件和Fragment的生命周期保持一致 } }
onStop()
-当Activity调用onStop()方法,Activity处于不可见的状态,此时当前的Activity停止。onDestroy()
-销毁,当Activity调用onDestory()方法我们通常会对我们使用的资源进行清理或者置空。
- Activity事件方法回调
1.启动Activity
09-13 18:56:24.359 26177-26177/com.example.pc.myapplication I/TAG: onCreate
09-13 18:56:24.360 26177-26177/com.example.pc.myapplication I/TAG: onStart
09-13 18:56:24.360 26177-26177/com.example.pc.myapplication I/TAG: onResume
2.退出Activity
09-13 18:57:04.597 26177-26177/com.example.pc.myapplication I/TAG: onPause
09-13 18:57:04.811 26177-26177/com.example.pc.myapplication I/TAG: onStop
09-13 18:57:04.811 26177-26177/com.example.pc.myapplication I/TAG: onDestroy
3.按Home键
09-13 19:38:49.998 26177-26177/com.example.pc.myapplication I/TAG: onPause
09-13 19:38:50.315 26177-26177/com.example.pc.myapplication I/TAG: onStop
4.重新启动
09-13 19:49:27.945 26177-26177/com.example.pc.myapplication I/TAG: onRestart
09-13 19:49:27.946 26177-26177/com.example.pc.myapplication I/TAG: onStart
09-13 19:49:27.946 26177-26177/com.example.pc.myapplication I/TAG: onResume
5.跳转新Activity
09-13 19:50:04.572 26177-26177/com.example.pc.myapplication I/TAG: onPause
09-13 19:50:05.052 26177-26177/com.example.pc.myapplication I/TAG: onStop
6.再回来旧的Activity
09-13 19:50:22.013 26177-26177/com.example.pc.myapplication I/TAG: onRestart
09-13 19:50:22.014 26177-26177/com.example.pc.myapplication I/TAG: onStart
09-13 19:50:22.014 26177-26177/com.example.pc.myapplication I/TAG: onResume
7,旋转屏幕
09-13 20:16:33.687 27173-27173/com.example.pc.myapplication I/TAG: onPause
09-13 20:16:33.688 27173-27173/com.example.pc.myapplication I/TAG: onStop
09-13 20:16:33.688 27173-27173/com.example.pc.myapplication I/TAG: onDestroy
09-13 20:16:33.740 27173-27173/com.example.pc.myapplication I/TAG: onCreate
09-13 20:16:33.740 27173-27173/com.example.pc.myapplication I/TAG: onStart
09-13 20:16:33.742 27173-27173/com.example.pc.myapplication I/TAG: onResume
这就是我们需要的Activity的生命周期,大家通过简单的Log来了解一下吧。
- 面试之 android activity 生命周期
- Android面试之Activity生命周期
- 面试之activity生命周期
- Android面试(Activity生命周期)
- android面试之Activity跟Fragment的生命周期
- Android 面试之横竖屏切换的Activity生命周期
- Android 之 Activity 生命周期
- android之activity生命周期
- Android 之 Activity 生命周期
- Android之Activity生命周期
- Android生命周期之Activity
- android之activity生命周期
- Android之Activity生命周期
- Android之Activity生命周期
- Android之Activity生命周期
- android 之activity生命周期
- Android之Activity生命周期
- Android之---Activity生命周期
- Webform的上传图片
- 折线图
- 利用mysql查询时遇到的语法错误
- 'inline' is the only legal storage class for constructors
- Chart图表
- Android面试之Activity生命周期
- HX711简介
- 序列化
- 从启动日志看Spring IOC的初始化和Bean生命周期
- 上传视频
- LeetCodeOJ——5.Longest Palindromic Substring
- Get与Post的区别
- 滑动窗口的最大值
- Python的拷贝