android基础篇(一)Activity的生命周期
2015-08-26 21:28
501 查看
一,概述
Activity作为android四大组件中应用最多的组件,通常情况下一个简单的android应用只需要使用activity就够了,但当你的应用要完成相对复杂点的功能的时候,这个时候得用到其他组件了。熟悉掌握activity的生命周期非常有必要,这样你对activity的工作更加深刻的理解,同时在真正应用的时候你可能要完成某些需求,这些需求可能需要在特定的时刻执行,这个时候你需要考虑在activity的哪一个生命周期完成了。二,Activity有7个生命周期,但总的来说,activity会经过4中状态
活动状态:在这个状态里,activity位于前台,用户可见,可以获得焦点暂停状态:当前activity被其他activity覆盖,当前activity依然可见,当时不能获得焦点
停止状态:当前activity不可见,不能获取焦点
销毁状态:当前activity结束,或者当前activity所在的进程被杀死(可能是由于系统内存紧张,优先杀死该进程),或者用户按下了回退键,使得当前activity被finish掉了
Activity的生命周期
onCreate当activity被创建的时候调用,在这个生命周期里面可以做一些程序的配置,创建视图,绑定数据等等,该方法只会调用一次
onStart
activity的时候调用,当前Activity变为可见
onReStart
当activity重新启动的时候会调用,之前启动过,只是被杀死了,现在重新启动会调用该方法,该方法总是在onStart之后调用
onResume
恢复activity的时候被回调,onStart()方法后一定会回调该方法
onPause
Activity暂停的时候被回调
onStop
activity停止的时候回调
onDestroy
当activity被销毁的时候调用,该方法只会调用一次
只是知道上面的理论还不够,这种东西你看一遍是记不住的,而且对activity的生命周期必须非常熟悉,包括之后的fragment的生命周期,下面让我们验证一下上面的叙述是否是正确的吧
下面看一张图对Activity生命周期的描述,这张也许大家都看过,它是谷歌android文档对activity生命周期的描述:下面写个简单的代码看看activity的生命周期是如何回调的
[code]package com.example.activitylifetest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends Activity implements View.OnClickListener { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn_finish = (Button) findViewById(R.id.btn_finish); Button btn_startother = (Button) findViewById(R.id.btn_startother); Log.e(TAG, "=====onCreate====="); btn_finish.setOnClickListener(this); btn_startother.setOnClickListener(this); } @Override protected void onDestroy() { super.onDestroy(); Log.e(TAG, "=====onDestroy====="); } @Override protected void onPause() { super.onPause(); Log.e(TAG, "=====onPause====="); } @Override protected void onRestart() { super.onRestart(); Log.e(TAG, "=====onRestart====="); } @Override protected void onStart() { super.onStart(); Log.e(TAG, "=====onStart====="); } @Override protected void onStop() { super.onStop(); Log.e(TAG, "=====onStop====="); } @Override protected void onResume() { super.onResume(); Log.e(TAG, "=====onResume====="); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_finish: finish(); break; case R.id.btn_startother: Intent intent = new Intent(this,OtherActivity.class); startActivity(intent); break; } } }
当我们运行这个程序的时候,当前activity是程序的入口
看一下它的配置
[code]<activity android:name="com.example.activitylifetest.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
对上面的配置做个说明
android.intent.action.MAIN
决定应用程序最先启动的Activity,这个指定了当前activity作为该应用程序的入口,优先级最高
android.intent.category.LAUNCHER
决定应用程序是否显示在程序列表里
运行上面的程序,看一下logcat的输出
单击startActivity按钮,当前MainActivity失去焦点,但依然可见,此时该Activity进入暂停状态
按下模拟器的back键,这个时候系统调用了onRestart,接着onStart,然后onResume,MainActivity进入运行状态
这个时候我们按下模拟器的home键,这个时候,系统调用onPause,接着onStop,MainActivity进入停止状态,MainActivity失去焦点,且不可见
上面我们给MainActivity加入了程序列表了,我们打开模拟器的程序列表,找到MainActivity并启动它
这个时候我们按下返回键,或者按下我们写的finish按钮
通过上面的logcat输出对比一下谷歌画的生命周期的图片
下面我们看一些特殊的情况
按下电源键,然后解锁当前Activity正在运行,我们按下home键后移除,系统仅调用了onPause和onStop,并没有走onDestroy
当我们在OnCreate方法中调用finish()方法,看一下日志的输出
,我们可以看到,系统走了onCreate后离家走了onDestroy,并没有走生命周期中的其他方法
当我们改变手机或者模拟器的屏幕方向的时候
总结一下,关于Activity的生命周期,自己最好做一个测试,并对比着activity生命周期描述的图片,activity的应用很简单,我们知道了Activity生命周期后可以在activity特定的生命周期里面完成我们要做的事情。
相关文章推荐
- 技术小黑屋----深入讲解Android中Activity launchMode
- Android周报
- android连接wifi相关知识
- Android环境变量配置【ANDROID_SDK_HOME】
- gdb调试Android-5.1版本JNI模块
- Android 数据存储---File内部存储
- Android内存泄露检测利器---LeakCanary
- Activity之间信息传递(参数传递)
- Android学习0826<八>(GridView、Spinner、AutoCompleteTextView、Gallery、ExpandableListView)
- Android-主题样式基本方式
- Android学习之四样式、主题、shape、回调
- Android Native层Binder.transact()函数调用 Binder.onTransact() 函数失败分析
- Android-有序广播简单例子
- Android 扫描wifi局域网ip
- android01-快速入门
- android 飞行模式分析
- 安装Android Studio结束时提示VT is not enabled in the system
- 如何紧跟android开发的潮流
- Android-服务与广播实现简单电话录音
- Android常用控件之GridView与ExpandableListView的用法