展会信息港展会大全

[Android开发学习22]Activity的声明周期--Activity Lifecycle
来源:互联网   发布日期:2016-01-14 10:43:10   浏览:1018次  

导读:一、基础知识:1.一个Activity的生命周期图:2.一个Activity的生命周期相关函数:[java]public class Activity extends Appl...

一、基础知识:

1.一个Activity的生命周期图:

2.一个Activity的生命周期相关函数:

[java]

public class Activity extends ApplicationContext {

protected void onCreate(Bundle savedInstanceState);

protected void onStart();

protected void onRestart();

protected void onResume();

protected void onPause();

protected void onStop();

protected void onDestroy();

}

public class Activity extends ApplicationContext {

protected void onCreate(Bundle savedInstanceState);

protected void onStart();

protected void onRestart();

protected void onResume();

protected void onPause();

protected void onStop();

protected void onDestroy();

}

3.一个Activity的生命周期相关函数的具体介绍:

Method Description Killable? Next

onCreate() Called when the activity is first created. This is where you should do all of your normal static set up: create views, bind data to lists, etc. This method also provides you with a Bundle containing the activity's previously frozen state, if there was one.

Always followed by onStart().

No onStart()

onRestart() Called after your activity has been stopped, prior to it being started again.

Always followed by onStart()

No onStart()

onStart() Called when the activity is becoming visible to the user.

Followed by onResume() if the activity comes to the foreground, or onStop() if it becomes hidden.

No onResume()or onStop()

onResume() Called when the activity will start interacting with the user. At this point your activity is at the top of the activity stack, with user input going to it.

Always followed by onPause().

No onPause()

onPause() Called when the system is about to start resuming a previous activity. This is typically used to commit unsaved changes to persistent data, stop animations and other things that may be consuming CPU, etc. Implementations of this method must be very quick because the next activity will not be resumed until this method returns.

Followed by either onResume() if the activity returns back to the front, or onStop() if it becomes invisible to the user.

Pre-HONEYCOMB onResume()or

onStop()

onStop() Called when the activity is no longer visible to the user, because another activity has been resumed and is covering this one. This may happen either because a new activity is being started, an existing one is being brought in front of this one, or this one is being destroyed.

Followed by either onRestart() if this activity is coming back to interact with the user, oronDestroy() if this activity is going away.

Yes onRestart()or

onDestroy()

onDestroy() The final call you receive before your activity is destroyed. This can happen either because the activity is finishing (someone called finish() on it, or because the system is temporarily destroying this instance of the activity to save space. You can distinguish between these two scenarios with theisFinishing() method. Yes nothing

这个表格的内容非常重要,必须全部理解。

上面三部分均引用自我们安装的SDK文件夹内的文档,我引用的具体位置是:

file:///D:/Program Files/android-sdk-windows__BACK/docs/reference/android/app/Activity.html#ActivityLifecycle

(从D:\Program Files\android-sdk-windows\docs中的offline.html文件 进入)

二、代码展示:

1."Activity_04\src\pinggle\activity_04\Activity_04.java"

[java]

package pinggle.activity_04;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

import android.app.Activity;

import android.content.Intent;

public class Activity_04 extends Activity {

private TextView myFirstText;

private ButtonmyButton;

@Override

protected void onCreate(Bundle savedInstanceState) {

System.out.println(" FirstActivity -->> onCreate ... ");

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_activity_04);

//根据控件的ID来取得代表控件的对象

myFirstText = (TextView)findViewById(R.id.myText);

myButton = (Button)findViewById(R.id.myButton);

// 为symbol和calculate设置显示的值

myFirstText.setText(R.string.first_text);

myButton.setText(R.string.button_text);

// 将监听器的对象绑定到按钮对象上面

myButton.setOnClickListener(new CalculateListener());

}

class CalculateListener implements OnClickListener{

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

// 为另一个Activity构造Intent对象

Intent intent = new Intent();

intent.setClass(Activity_04.this, SecondActivity.class);

// 使用这个Intent对象来启动SecondActivity

Activity_04.this.startActivity(intent);

}

}

@Override

protected void onStart() {

// TODO Auto-generated method stub

System.out.println(" FirstActivity -->> onStart ... ");

super.onStart();

}

@Override

protected void onRestart() {

// TODO Auto-generated method stub

System.out.println(" FirstActivity -->> onRestart ... ");

super.onRestart();

}

@Override

protected void onResume() {

// TODO Auto-generated method stub

System.out.println(" FirstActivity -->> onResume ... ");

super.onResume();

}

@Override

protected void onPause() {

// TODO Auto-generated method stub

System.out.println(" FirstActivity -->> onPause ... ");

super.onPause();

}

@Override

protected void onStop() {

// TODO Auto-generated method stub

System.out.println(" FirstActivity -->> onStop ... ");

super.onStop();

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

System.out.println(" FirstActivity -->> onDestroy ... ");

super.onDestroy();

}

}

package pinggle.activity_04;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

import android.app.Activity;

import android.content.Intent;

public class Activity_04 extends Activity {

private TextView myFirstText;

private Button myButton;

@Override

protected void onCreate(Bundle savedInstanceState) {

System.out.println(" FirstActivity -->> onCreate ... ");

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_activity_04);

//根据控件的ID来取得代表控件的对象

myFirstText = (TextView)findViewById(R.id.myText);

myButton = (Button)findViewById(R.id.myButton);

// 为symbol和calculate设置显示的值

myFirstText.setText(R.string.first_text);

myButton.setText(R.string.button_text);

// 将监听器的对象绑定到按钮对象上面

myButton.setOnClickListener(new CalculateListener());

}

class CalculateListener implements OnClickListener{

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

// 为另一个Activity构造Intent对象

Intent intent = new Intent();

intent.setClass(Activity_04.this, SecondActivity.class);

// 使用这个Intent对象来启动SecondActivity

Activity_04.this.startActivity(intent);

}

}

@Override

protected void onStart() {

// TODO Auto-generated method stub

System.out.println(" FirstActivity -->> onStart ... ");

super.onStart();

}

@Override

protected void onRestart() {

// TODO Auto-generated method stub

System.out.println(" FirstActivity -->> onRestart ... ");

super.onRestart();

}

@Override

protected void onResume() {

// TODO Auto-generated method stub

System.out.println(" FirstActivity -->> onResume ... ");

super.onResume();

}

@Override

protected void onPause() {

// TODO Auto-generated method stub

System.out.println(" FirstActivity -->> onPause ... ");

super.onPause();

}

@Override

protected void onStop() {

// TODO Auto-generated method stub

System.out.println(" FirstActivity -->> onStop ... ");

super.onStop();

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

System.out.println(" FirstActivity -->> onDestroy ... ");

super.onDestroy();

}

}

2."Activity_04\src\pinggle\activity_04\SecondActivity.java"

[java]

package pinggle.activity_04;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

public class SecondActivity extends Activity{

private TextView mySecondText;

@Override

protected void onCreate(Bundle savedInstanceState) {

System.out.println(" SecondActivity -->> onCreate ... ");

super.onCreate(savedInstanceState);

setContentView(R.layout.second);

//根据控件的ID来取得代表控件的对象

mySecondText = (TextView)findViewById(R.id.mySecondText);

// 为symbol和calculate设置显示的值

mySecondText.setText(R.string.second_text);

}

@Override

protected void onStart() {

// TODO Auto-generated method stub

System.out.println(" SecondActivity -->> onStart ... ");

super.onStart();

}

@Override

protected void onRestart() {

// TODO Auto-generated method stub

System.out.println(" SecondActivity -->> onRestart ... ");

super.onRestart();

}

@Override

protected void onResume() {

// TODO Auto-generated method stub

System.out.println(" SecondActivity -->> onResume ... ");

super.onResume();

}

@Override

protected void onPause() {

// TODO Auto-generated method stub

System.out.println(" SecondActivity -->> onPause ... ");

super.onPause();

}

@Override

protected void onStop() {

// TODO Auto-generated method stub

System.out.println(" SecondActivity -->> onStop ... ");

super.onStop();

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

System.out.println(" SecondActivity -->> onDestroy ... ");

super.onDestroy();

}

}

package pinggle.activity_04;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

public class SecondActivity extends Activity{

private TextView mySecondText;

@Override

protected void onCreate(Bundle savedInstanceState) {

System.out.println(" SecondActivity -->> onCreate ... ");

super.onCreate(savedInstanceState);

setContentView(R.layout.second);

//根据控件的ID来取得代表控件的对象

mySecondText = (TextView)findViewById(R.id.mySecondText);

// 为symbol和calculate设置显示的值

mySecondText.setText(R.string.second_text);

}

@Override

protected void onStart() {

// TODO Auto-generated method stub

System.out.println(" SecondActivity -->> onStart ... ");

super.onStart();

}

@Override

protected void onRestart() {

// TODO Auto-generated method stub

System.out.println(" SecondActivity -->> onRestart ... ");

super.onRestart();

}

@Override

protected void onResume() {

// TODO Auto-generated method stub

System.out.println(" SecondActivity -->> onResume ... ");

super.onResume();

}

@Override

protected void onPause() {

// TODO Auto-generated method stub

System.out.println(" SecondActivity -->> onPause ... ");

super.onPause();

}

@Override

protected void onStop() {

// TODO Auto-generated method stub

System.out.println(" SecondActivity -->> onStop ... ");

super.onStop();

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

System.out.println(" SecondActivity -->> onDestroy ... ");

super.onDestroy();

}

}

3."Activity_04\res\layout\activity_activity_04.xml"

[html]

<?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"

>

<TextView

android:id="@+id/myText"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@+string/hello_world"

/>

<Button

android:id="@+id/myButton"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</LinearLayout>

<?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"

>

<TextView

android:id="@+id/myText"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@+string/hello_world"

/>

<Button

android:id="@+id/myButton"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</LinearLayout>

4."Activity_04\res\layout\second.xml"

[html]

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView

android:id="@+id/mySecondText"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@+string/hello_world"

/>

</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView

android:id="@+id/mySecondText"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@+string/hello_world"

/>

</LinearLayout>

5."Activity_04\res\values\strings.xml"

[html]

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="app_name">Activity_04</string>

<string name="hello_world">Hello world!</string>

<string name="menu_settings">Settings</string>

<string name="first_text">这是第一个Activity!</string>

<string name="button_text">点击,跳转到第二个Activity</string>

<string name="second_text">这是第二个Activity!</string>

</resources>

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="app_name">Activity_04</string>

<string name="hello_world">Hello world!</string>

<string name="menu_settings">Settings</string>

<string name="first_text">这是第一个Activity!</string>

<string name="button_text">点击,跳转到第二个Activity</string>

<string name="second_text">这是第二个Activity!</string>

</resources>

6.“Activity_04\AndroidManifest.xml”

[html]

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="pinggle.activity_04"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="4"

android:targetSdkVersion="4" />

<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name="pinggle.activity_04.Activity_04"

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="pinggle.activity_04.SecondActivity"

android:label="@string/second_text" >

</activity>

</application>

</manifest>

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="pinggle.activity_04"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="4"

android:targetSdkVersion="4" />

<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name="pinggle.activity_04.Activity_04"

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="pinggle.activity_04.SecondActivity"

android:label="@string/second_text" >

</activity>

</application>

</manifest>

三、效果展示:

首先启动程序-->>

在调试信息处有如下打印语句:

然后点击按钮-->>

在调试信息处有如下打印语句:

按键盘的"返回"键-->>

在调试信息处有如下打印语句:

再按一次"返回"键,退出程序,有如下打印语句-->>

从上面的调试信息就可以看出整个Activity生命周期的流程了。。

如果想将第二个Activity的显示改为对话框的形式,只需修改"Activity_04\AndroidManifest.xml”中的如下内容:

[java]

<activity

android:name="pinggle.activity_04.SecondActivity"

android:label="@string/second_text"

android:theme="@android:style/Theme.Dialog" >

</activity>

<activity

android:name="pinggle.activity_04.SecondActivity"

android:label="@string/second_text"

android:theme="@android:style/Theme.Dialog" >

</activity>

效果如下:

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港