Android开发之声明周期Activity Lifecycle

  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 Filesandroid-sdk-windowsdocs中的offline.html文件 进入)

二、代码展示:

1."Activity_04srcpinggleactivity_04Activity_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 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(); 

    } 

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_04srcpinggleactivity_04SecondActivity.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_04reslayoutactivity_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_04reslayoutsecond.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_04resvaluesstrings.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_04AndroidManifest.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 Lifecycle-activity声明周期">

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

 

 

然后点击按钮-->> 

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

 

 

 

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

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

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

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

 如果想将第二个Activity的显示改为对话框的形式,只需修改"Activity_04AndroidManifest.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>

 效果如下:

 

 

时间: 2024-08-02 11:16:24

Android开发之声明周期Activity Lifecycle的相关文章

android开发如何声明动态一维数组

问题描述 android开发如何声明动态一维数组 我是一个Android新手,我现在想读取一个文件,文件大小未知,我想用 byte[] buffer = new byte[3072]; temp_stream = new FileInputStream(img_name); temp_stream.read(buffer); buffer接收,如何声明一个动态byte[] buffer. 解决方案 Java获得文件大小的方法(通过FileInputStream) 根据指定文件创建FileInpu

Android开发中重要组件activity 生命周期以及启动模式分析

Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务. Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件. 在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应.Activity之间通过Intent进行通信. Activity生命周期 安卓活动由一个返回栈管理 安卓活动有四个状态 1.运行状态 当一个活动位

Android开发之多个Activity间的交互

一.基础知识: 1.一个Intent对象包含了一组信息: 1. Component name 指定启动的Activity 2. Action 要做什么 3. Data 传送数据 4. Category 5. Extras 键值对 6. Flags 2.Intent基本用法: [java] view plaincopyprint?// 生成一个Intent对象 Intent intent = new Intent(); intent.putExtra("testIntent", &quo

android开发中重要组件Activity详细学习教程

Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之一.它间接继承自android.content.Context,因此,有些时候都直接把Activity实例当做Context的实例来使用. 如前面所提到的要在应用程序中使用Activity,必须在Android Manifest.xml中配置它. 新建一个Android工程,新建过程中勾选creat

Android开发 旋转屏幕导致Activity重建解决方法_Android

Android开发文档上专门有一小节解释这个问题.简单来说,Activity是负责与用户交互的最主要机制,任何"设置"(Configuration)的改变都可能对Activity的界面造成影响,这时系统会销毁并重建Activity以便反映新的Configuration. "屏幕方向"(orientation)是一个Configuration,通过查看Configuration类的javadoc可以看到其他Configuration还有哪些:如fontScale.ke

Android开发 旋转屏幕导致Activity重建解决方法

Android开发文档上专门有一小节解释这个问题.简单来说,Activity是负责与用户交互的最主要机制,任何"设置"(Configuration)的改变都可能对Activity的界面造成影响,这时系统会销毁并重建Activity以便反映新的Configuration. "屏幕方向"(orientation)是一个Configuration,通过查看Configuration类的javadoc可以看到其他Configuration还有哪些:如fontScale.ke

android开发-关于不同的activity获得SQLite对象

问题描述 关于不同的activity获得SQLite对象 我创建了一个SQLite以及操作这个数据库的类,代码如下 这是数据库的类 public class account extends SQLiteOpenHelper { private static final int VERSION = 1;// 定义数据库版本号 private static final String DBNAME = "account.db";// 定义数据库名 public account(Context

Android开发 Activity和Fragment详解_Android

1.Activity的生命周期 1)多个Activity组成Activity栈,当前活动位于栈顶.我们先来看看各种Activity基类的类图: 当Activity类定义出来之后,这个Activity何时被实例化.它所包含的方法何时被调用,这些都不是由开发者所决定的,都应该由Android系统来决定. 下面我们来看一下Activity的生命周期: 2.Activity的用法 1)启动.关闭Activity // 首先需要创建启动的Activity对应的Intent Intent intent =

android-Android开发不能够完成Activity之间的跳转

问题描述 Android开发不能够完成Activity之间的跳转 class BackButton implements OnClickListener{ @Override public void onClick(View v) { // TODO Auto-generated method stub Intent backintent=new Intent(); backintent.setClass(LoginOrRegister.this,MainScreen.class); backi