Activity的生命周期
来源:互联网 发布:sql sever select as 编辑:程序博客网 时间:2024/06/05 07:21
Activity的生命周期包含7个方法,
分别是:onCreate()——创建,onStart()——启动,onResume()——开始,onPause()——暂停,onRestart()——重新启动,onDestory()——销毁,onStop()——停止。
onCreate:创建Activity调用,用于Activity的初始化。
onStart():Activity在屏幕上对用户可见时调用。
onResume():Activity获得焦点时调用。
onPause():Activity被暂停时调用,即当有当前activity进入另一个Activity时(准备创建另一个Activity时)。
onRestart():从另一个activity回到当前Activity时。
onStop():Activity被停止或者Activity变成不可见时。
onDestory():调用了finish()或者android回收内存时。
这里结合一个例子说明。
创建2个Activity,分别为FirstActivity,SecondActivity。
代码如下:
FirstActivity.java:
package com.and.test;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class FirstActivity extends Activity {private Button btn = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {System.out.println("FirstActivity-------onCreate()");super.onCreate(savedInstanceState);this.setContentView(R.layout.first);btn = (Button) super.findViewById(R.id.btn);btn.setText(R.string.gotosecond);btn.setOnClickListener(new ButtonClickLister());}class ButtonClickLister implements OnClickListener {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setClass(FirstActivity.this, SecondActivity.class);FirstActivity.this.startActivity(intent);}}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubSystem.out.println("FirstActivity-------onDestory()");super.onDestroy();}@Overrideprotected void onPause() {// TODO Auto-generated method stubSystem.out.println("FirstActivity-------onPause()");super.onPause();}@Overrideprotected void onRestart() {// TODO Auto-generated method stubSystem.out.println("FirstActivity-------onRestart()");super.onRestart();}@Overrideprotected void onResume() {// TODO Auto-generated method stubSystem.out.println("FirstActivity-------onResume()");super.onResume();}@Overrideprotected void onStart() {// TODO Auto-generated method stubSystem.out.println("FirstActivity-------onStart()");super.onStart();}@Overrideprotected void onStop() {// TODO Auto-generated method stubSystem.out.println("FirstActivity-------onStop()");super.onStop();}}
SecondActivity.java:
package com.and.test;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.widget.TextView;/** * 每一个Activity都需要在AndroidManafest.xml中声明 * @author babylove * */public class SecondActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);// 指定布局this.setContentView(R.layout.second);// 获取布局文件中的TextView组件TextView textview = (TextView) this.findViewById(R.id.myTextView);// 设置textview的值。R.string.second_activity_textview:res/values/strings.xml文件中定义的name为second_activity_textview的Stringtextview.setText(R.string.second_activity_textview);// 获取传递过来的IntentIntent intent = getIntent();// 获取传递的数据String test = intent.getStringExtra("test");textview.setText(test);textview.setText("信息已发送!");System.out.println("SecondActivity-------onCreate()");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();System.out.println("SecondActivity-------onDestroy()");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();System.out.println("SecondActivity-------onPause()");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();System.out.println("SecondActivity-------onRestart()");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();System.out.println("SecondActivity-------onResume()");}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();System.out.println("SecondActivity-------onStart()");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();System.out.println("SecondActivity-------onStop()");}}
这2个Activity都重写了Activity生命周期设计的7个方法。
在FirstActivity中,有一个按钮,单击该按钮可以进入SecondActivity。
FirstActivity的布局文件first.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><Button android:id="@+id/btn" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
String.xml:
<?xml version="1.0" encoding="utf-8"?><resources> <string name="hello">Hello World, HelloandroidActivity!</string> <string name="app_name">Hello Android</string> <string name="second_activity_textview">The Second Activity</string> <string name="gotosecond">跳转到第二个activity</string></resources>
在AndroidManifest.xml中注册这2个Activity。
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.and.test" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="9" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".FirstActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity><activity android:name=".SecondActivity"></activity> </application></manifest>
接下来,为了看到调用Activity的7个生命周期方法时的输出,在LogCat中增加一个过滤器。
OK,运行我们的Android程序。
首先显示的是FirstActivity,在LogCat中看到如下输出:
03-30 11:46:08.996: INFO/System.out(861): FirstActivity-------onCreate()
03-30 11:46:09.096: INFO/System.out(861): FirstActivity-------onStart()
03-30 11:46:09.096: INFO/System.out(861): FirstActivity-------onResume()
首次运行分别调用了onCreate(),onStart()和onResume(),这3个方法调用完毕后我们就可以看到FirstActivity这个Activity了。
单击“跳转到第二个activity”跳转到SecondActivity。
LogCat中依次输出:
03-30 11:59:09.096: INFO/System.out(861): FirstActivity-------onPause()
03-30 11:59:09.175: INFO/System.out(861): SecondActivity-------onCreate()
03-30 11:59:09.175: INFO/System.out(861): SecondActivity-------onStart()
03-30 11:59:09.196: INFO/System.out(861): SecondActivity-------onResume()
03-30 11:59:09.757: INFO/System.out(861): FirstActivity-------onStop()
可以看到,首先是FirstActivity暂停,然后依次是SecondActivity的onCreate(),onStart(),onResume()。对于SecondActivity来说是首次创建,因此也是调用了这3个方法。然后SecondActivity被呈现,然后FirstActivity停止。
单击Back按钮,回到FirstActivity。
LogCat中输出如下:
03-30 12:07:03.015: INFO/System.out(861): SecondActivity-------onPause()
03-30 12:07:03.055: INFO/System.out(861): FirstActivity-------onRestart()
03-30 12:07:03.055: INFO/System.out(861): FirstActivity-------onStart()
03-30 12:07:03.055: INFO/System.out(861): FirstActivity-------onResume()
03-30 12:07:03.617: INFO/System.out(861): SecondActivity-------onStop()
03-30 12:07:03.617: INFO/System.out(861): SecondActivity-------onDestroy()
现在是在FirstActivity,继续单击返回按钮,回到应用程序列表。
Logcat输出如下:
03-30 12:35:57.797: INFO/System.out(861): FirstActivity-------onPause()
03-30 12:35:59.146: INFO/System.out(861): FirstActivity-------onStop()
03-30 12:35:59.146: INFO/System.out(861): FirstActivity-------onDestory()
其实用一个例子就可以很好的理解Activity的生命周期了,附上Android API提供的Activity生命周期状态图:
结合上面的例子跟这个图,理解起来就应该就差不多了。
- 什么是Activity?Activity的生命周期!
- Activity及Activity的生命周期
- Activity 的生命周期
- Android activity的生命周期
- Activity的生命周期
- Android:Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Android Activity的生命周期
- Android Activity的生命周期
- Activity的生命周期一
- Android Activity的生命周期
- Activity的生命周期
- Android activity的生命周期
- 【C++复习三】C++ 运算符优先级与结合性
- 只出现一次的数
- 如何得到相对路径(MFC)
- Extjs4 grid selectChange多次触发问题
- 开源个我的 x86 架构操作系统的 boot 程序
- Activity的生命周期
- VNC Viewer鼠标右键问题解决
- CodeIgniter 加密类分析
- 1.Icarus Verilog 2.VeriWell Verilog Simulator
- 五种JSP页面跳转方法详解
- Python的一些优势
- unix网络编程环境
- C# 动态创建DataTable
- 初识MVC模式