Activity生命周期管理之一——Starting一个Activity
2013-01-10 10:53
295 查看
Activity的生命周期完全由Android系统进行管理,周期中有几个主要的状态,下面介绍一下
理解生命周期回调函数
下面一张图说的很清晰:
根据app的复杂性,不一定实现所有生命周期函数,但理解他们并知道什么时候该实现是很重要的,实现周期函数要保证一下几点:
接电话或转移到另一个app的时候不要产生冲突
用户不用时不要消耗可观的系统资源
在用户暂时离开时不要丢失用户数据和进展
屏幕方向改变时不要丢失用户数据
有三个状态时可以保持的:
Resumed此状态下,activity在前台,可以和用户交互,也叫运行状态Paused此状态下,本activity被另一个前台activity隐藏,这个前台activity是半透明的或只占据部分屏幕,paused状态下activity不接受用户输入,也不执行任何代码Stopped此状态下,activity完全不可见,也就是在后台,所有实例对象和成员变量等都被保存,但不执行任何代码
其他状态都是瞬时的,调用onCreate后立即调用onStart后立即调用onResume
这些是基本的周期状态,下面看看一些特殊的生命周期表现
指定app启动Activity
用户触点你的app icon时,系统调用被你声明为launcher activity的onCreate()函数,这个activity提供程序用户界面的主入口
可以在Android manifest文件中定义
launcher activity必须以
Note: 使用Android SDK tools建立项目时,以上声明自动包含,如果没有
创建一个新实例
所有的新Activity实例产生都调用onCreate()函数
必须实现onCreate()函数做一些基本的初始化工作,例如用户界面初始化,成员变量初始化,或者UI的配置等等,例如下面例子:
Caution: 用
技术上说,onStart()函数之后,界面可见,但onResume()函数调用紧随其后,所以看不出来
如下几种情况可以使activity脱离resumed状态:
1.来电话
2.用户转向另一个activity
3.屏幕被关掉
以后再说onStart()和onResume()函数何时使用,他们也是很有用的,特别对于经常从Paused和Stopped状态转换为Resumed状态的activity
Note: onCreate()的参数
大多数app不需要实现,因为大多清理工作会在onPause()和onStop()函数中做,然而,若果activity有后台线程或者其他不正确关闭会产生内存泄露的资源,要在onDestroy()函数中处理他们
Note: 系统总是在onPause()和onStop()之后调用onDestroy(),但一种情况除外,就是在onCreate()中调用finish()之后,直接调用onDestroy()并且不调用任何其他周期函数
理解生命周期回调函数
下面一张图说的很清晰:根据app的复杂性,不一定实现所有生命周期函数,但理解他们并知道什么时候该实现是很重要的,实现周期函数要保证一下几点:
接电话或转移到另一个app的时候不要产生冲突
用户不用时不要消耗可观的系统资源
在用户暂时离开时不要丢失用户数据和进展
屏幕方向改变时不要丢失用户数据
有三个状态时可以保持的:
Resumed此状态下,activity在前台,可以和用户交互,也叫运行状态Paused此状态下,本activity被另一个前台activity隐藏,这个前台activity是半透明的或只占据部分屏幕,paused状态下activity不接受用户输入,也不执行任何代码Stopped此状态下,activity完全不可见,也就是在后台,所有实例对象和成员变量等都被保存,但不执行任何代码
其他状态都是瞬时的,调用onCreate后立即调用onStart后立即调用onResume
这些是基本的周期状态,下面看看一些特殊的生命周期表现
指定app启动Activity
用户触点你的app icon时,系统调用被你声明为launcher activity的onCreate()函数,这个activity提供程序用户界面的主入口可以在Android manifest文件中定义
launcher activity必须以
<intent-filter>定义,包含
MAINaction 和
LAUNCHERcategory 标签,例如:
<activity android:name=".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>
Note: 使用Android SDK tools建立项目时,以上声明自动包含,如果没有
MAINaction 或
LAUNCHERcategory,app icon不会出现在Home屏幕列表里
创建一个新实例
所有的新Activity实例产生都调用onCreate()函数必须实现onCreate()函数做一些基本的初始化工作,例如用户界面初始化,成员变量初始化,或者UI的配置等等,例如下面例子:
TextView mTextView; // Member variable for text view in the layout @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the user interface layout for this Activity // The layout file is defined in the project res/layout/main_activity.xml file setContentView(R.layout.main_activity); // Initialize member TextView so we can manipulate it later mTextView = (TextView) findViewById(R.id.text_message); // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // For the main activity, make sure the app icon in the action bar // does not behave as a button ActionBar actionBar = getActionBar(); actionBar.setHomeButtonEnabled(false); } }
Caution: 用
SDK_INT以兼容Android2.0一下的版本,否则会出现运行时异常
技术上说,onStart()函数之后,界面可见,但onResume()函数调用紧随其后,所以看不出来
如下几种情况可以使activity脱离resumed状态:
1.来电话
2.用户转向另一个activity
3.屏幕被关掉
以后再说onStart()和onResume()函数何时使用,他们也是很有用的,特别对于经常从Paused和Stopped状态转换为Resumed状态的activity
Note: onCreate()的参数
savedInstanceState后面再说
Destroy一个Activity
当app被完全移出内存之前,最后调用onDestroy()函数大多数app不需要实现,因为大多清理工作会在onPause()和onStop()函数中做,然而,若果activity有后台线程或者其他不正确关闭会产生内存泄露的资源,要在onDestroy()函数中处理他们
@Override public void onDestroy() { super.onDestroy(); // Always call the superclass // Stop method tracing that the activity started during onCreate() android.os.Debug.stopMethodTracing(); }
Note: 系统总是在onPause()和onStop()之后调用onDestroy(),但一种情况除外,就是在onCreate()中调用finish()之后,直接调用onDestroy()并且不调用任何其他周期函数
相关文章推荐
- 管理Activity的生命周期(3)暂停和重启一个Activity
- Android官方开发文档Training系列课程中文版:管理Activity的生命周期之启动一个Activity
- Android-管理Activity生命周期 -暂停和恢复一个Activity
- Activity生命周期管理之三——Stopping或者Restarting一个Activity
- Android-管理Activity生命周期 -开始一个Activity
- 管理Activity的生命周期(2)Pausing和Resuming
- Android 插件化原理解析(5):Activity 生命周期管理(上)
- android中一个activity的生命周期试验记录
- 【代码】利用Android的Log 演示一个activity的生命周期
- 一个FragmentActivity多个Fragment的生命周期事件记录
- Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
- Managing the Activity Lifecycle--管理Activity生命周期
- 谈谈Android Activity的生命周期管理
- 管理Activity的生命周期
- Android Activity生命周期和堆栈管理的详解
- [Andriod官方训练教程]管理Activity的生命活动之开始一个Activity
- Activity 生命周期及其栈管理方式
- android中,在activity弹出一个对话框,并不会执行onpause生命周期方法
- app整个应用生命周期管理ActivityLifecycleCallbacks,registerActivityLifecycleCallbacks
- 对生命周期回调函数的认识————starting an activity