`
ln_ydc
  • 浏览: 270745 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Android笔记(5)---Activity生命周期

 
阅读更多

 Android api中提供的Activity生命周期图


 

创建一个测试项目ActivityLife
在MainActivity.java中
重写onCreate,onStart,onResume,onPause,onStop,onRestart,onDestroy方法

 

package com.example.activitylife;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.e(TAG, "~~~onCreate~~~");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "~~~onStart~~~");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e(TAG, "~~~onReStart~~~");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "~~~onResume~~~");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG, "~~~onPause~~~");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG, "~~~onStop~~~");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG, "~~~onDestroy~~~");
    }
}

 

运行该应用程序
下面是不同操作对应的LogCat输出
打开应用程序时,对应下图过程1

 
打开应用程序后,按下BACK键时,对应下图过程2

 
打开应用程序后,按下HOME键时,对应下图过程3


 
在上一操作的基础上,再次打开应用程序时,对应下图过程4

操作流程图:

 ========================================================================
参考文章提出的一个问题:
EditText在状态1时输入一个字符串,如"Hello,Android!",再经过3,4状态后无法保持
看到有评论说  有id的view,android会自动维护状态
经测试,无论EditText无论有无id,字符串都可保持住
测试如下:
修改res/layout/activity_main.xml,在布局中添加一个EditText控件
<? xml version ="1.0" encoding= "utf-8" ?>
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
    xmlns:tools ="http://schemas.android.com/tools"
    android:layout_width ="fill_parent"
    android:layout_height ="fill_parent"
    android:orientation ="vertical"
    android:paddingBottom ="@dimen/activity_vertical_margin"
    android:paddingLeft ="@dimen/activity_horizontal_margin"
    android:paddingRight ="@dimen/activity_horizontal_margin"
    android:paddingTop ="@dimen/activity_vertical_margin"
    tools:context =".MainActivity" >

    <TextView
        android:layout_width ="fill_parent"
        android:layout_height ="wrap_content"
        android:text ="@string/hello_world" />

    <EditText
        android:id ="@+id/editText"
        android:layout_width ="fill_parent"
        android:layout_height ="wrap_content"
        android:inputType ="text" />

</ LinearLayout>
 
再依次运行过程1-->3-->4
在状态1的时候,在EditText控件中写入一个字符串,如Hello,Android!,在经过3,4过程后字符串依旧保持

  ========================================================================
测试状态5
修改res/layout/main_activity.xml,添加一个Button
<? xml version ="1.0" encoding= "utf-8" ?>
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
    xmlns:tools ="http://schemas.android.com/tools"
    android:layout_width ="fill_parent"
    android:layout_height ="fill_parent"
    android:orientation ="vertical"
    android:paddingBottom ="@dimen/activity_vertical_margin"
    android:paddingLeft ="@dimen/activity_horizontal_margin"
    android:paddingRight ="@dimen/activity_horizontal_margin"
    android:paddingTop ="@dimen/activity_vertical_margin"
    tools:context =".MainActivity" >

    <TextView
        android:id = "@+id/mainTv"
        android:layout_width ="fill_parent"
        android:layout_height ="wrap_content"
        android:text ="@string/hello_world" />

    <EditText
        android:id = "@+id/mainEt"
        android:layout_width= "fill_parent"
        android:layout_height ="wrap_content"
        android:inputType ="text" />

    <Button
        android:id ="@+id/callDialog"
        android:layout_width ="fill_parent"
        android:layout_height ="wrap_content"
        android:text ="@string/call_dialog" />

</ LinearLayout>
 
添加一个Activity,SecondActivity
并重写onCreate,onStart,onResume,onPause,onStop,onRestart,onDestroy方法
package com.example.activitylife;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class SecondActivity extends Activity {

    private static final String TAG = "SecondActivity";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        
        Log.e(TAG, "~~~onCreate~~~");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "~~~onStart~~~");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e(TAG, "~~~onReStart~~~");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "~~~onResume~~~");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG, "~~~onPause~~~");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG, "~~~onStop~~~");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG, "~~~onDestroy~~~");
    }
}
 
修改MainActivity.java
package com.example.activitylife;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";
    private Button callDialogBut;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.e(TAG, "~~~onCreate~~~");

        callDialogBut = (Button) findViewById(R.id.callDialog);
        callDialogBut.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "~~~onStart~~~");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e(TAG, "~~~onReStart~~~");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "~~~onResume~~~");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG, "~~~onPause~~~");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG, "~~~onStop~~~");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG, "~~~onDestroy~~~");
    }
}
 
修改AndroidManifest.xml文件
<? xml version ="1.0" encoding= "utf-8" ?>
< manifest xmlns:android ="http://schemas.android.com/apk/res/android"
    package ="com.example.activitylife"
    android:versionCode ="1"
    android:versionName ="1.0" >

    <uses-sdk
        android:minSdkVersion ="8"
        android:targetSdkVersion ="17" />

    <application
        android:allowBackup ="true"
        android:icon ="@drawable/ic_launcher"
        android:label ="@string/app_name"
        android:theme ="@style/AppTheme" >
        < activity
            android:name ="com.example.activitylife.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>
        < activity
            android:name =".SecondActivity"
            android:label ="@string/app_name"
            android:theme ="@android:style/Theme.Dialog" >
        </ activity>
    </application >

</ manifest>
 
启动应用程序后,点击 调用对话框 按钮,相当于过程5中的onPause

 
在上一步操作的基础上,点击BACK键,相当于过程5中的onResume

 
程序运行截图:
启动应用程序
 
按下 调用对话框 按钮

 
再按下BACKUP键

 
 

 

参考文章:

-----------------------

两分钟彻底让你明白Android Activity生命周期(图文)!

  • 大小: 61.1 KB
  • 大小: 7.2 KB
  • 大小: 7.2 KB
  • 大小: 5.4 KB
  • 大小: 7.2 KB
  • 大小: 58.1 KB
  • 大小: 71.7 KB
  • 大小: 8.9 KB
  • 大小: 9 KB
  • 大小: 71 KB
  • 大小: 73.9 KB
  • 大小: 70.6 KB
分享到:
评论

相关推荐

    Android自学笔记-15-Activity的生命周期

    最后,注意Android的Task和Back Stack也是Activity生命周期的重要组成部分。Task是一组按照创建顺序堆叠的Activity,而Back Stack则管理着这些Task的历史记录。用户可以通过返回键按照栈的顺序回退到之前的状态。 ...

    android 学习笔记7-页面跳转 Activity启动 生命周期 activity数据传递

    1、创建一个自己的Activity 2、启动activity-显示启动和隐式启动: 3、隐式启动自己的activity 4、获取隐启动传递过来...5、显示启动传递数据 6、禁用掉横竖屏切换 7、开启activity获取返回值-startActivityForResult:

    Android学习笔记-Activity篇

    在Android开发中,Activity是应用程序的基本构建...理解Activity生命周期及其在Task和Back Stack中的行为,有助于创建高效且用户体验良好的应用。在实际开发中,根据应用需求灵活运用这些概念,将使你的应用更加出色。

    Android开发笔记(3)-Activity生命周期

    总之,掌握Activity生命周期是Android开发的基础,它涉及到应用的响应性、效率和稳定性。开发者需要根据应用的需求灵活运用生命周期方法,确保在不同场景下都能提供优质的用户体验。通过深入学习和实践,我们可以更...

    Android笔记(3)---Activity和Intent

    Activity生命周期包括创建(onCreate())、启动(onStart())、可见(onResume())、暂停(onPause())、停止(onStop())、恢复(onRestart())和销毁(onDestroy())等几个关键阶段。开发者需要根据这些阶段来管理...

    Android Activity学习笔记

    Activity生命周期是指Activity从创建到销毁的整个过程。生命周期可以分为三个阶段:创建、运行和销毁。 1. 创建阶段:包括onCreate、onStart、onResume三个方法。这三个方法都是系统自动调用的,用于初始化Activity...

    Android自学笔记-16-任务栈

    在Android系统中,任务栈...通过熟练掌握任务启动模式、回退栈机制以及Intent Flag的使用,开发者可以更好地控制应用的生命周期,提供无缝的用户导航体验。在实践中不断探索和学习,是提升Android开发技能的关键。

    Android群英传笔记-----by ---------刘某人程序员

    其次,笔记深入讲解了Android应用程序的生命周期管理,包括Activity、Service、BroadcastReceiver和ContentProvider的创建与使用。这部分内容对于理解和控制应用的行为至关重要,能确保你的程序在不同场景下运行稳定...

    Android自学笔记-13-ContentObserver内容观察者

    - 不要忘记在Activity或Fragment的onResume()中注册ContentObserver,在onPause()中注销,遵循Android的生命周期管理。 - 避免过度使用ContentObserver,因为它可能会增加系统的负担,特别是对于大量数据变更的...

    新版Android开发教程笔记--基础入门一

    Intent则用于在Activity之间传递数据或启动服务,理解它们的生命周期和通信机制是Android开发的关键。 7. **Fragment**:Fragment是在大型屏幕上分割Activity的模块化组件,尤其在设计适应多屏幕尺寸的应用时,...

    新版Android开发教程&笔记2--基础入门二

    学习如何创建和管理Activity,以及理解活动生命周期是基础入门的重要部分。 5. **意图(Intent)与数据传递**:Intent用于启动另一个Activity或服务,可以携带数据进行传递。理解如何使用Intent启动新的Activity并...

    新版Android开发教程+笔记七--基础UI编程1

    - Activity的生命周期:当创建一个Activity时,系统会调用几个生命周期方法。其中onCreate()方法是一个关键点,在这里完成对Activity的初始化,设置界面布局等。 - UI组件的布局管理:在XML中定义界面布局是Android...

    Android学习笔记(5-13)

    首先,从第五章开始,通常会涉及Android应用程序的基础架构,包括Activity生命周期、Intent以及Service的使用。Activity是Android应用中的基本组件,负责用户界面的展示。生命周期的理解至关重要,因为它涉及到何时...

    android笔记-10.09

    这篇笔记主要涉及的是Android应用开发的基础知识,包括XML布局文件的编写和Activity的生命周期管理。 首先,XML布局文件是Android应用界面设计的核心。在给出的示例中,可以看到一个基本的LinearLayout布局。...

    android生命周期管理:重启或停止一个Activity

    在Android应用开发中,Activity是用户界面的基本单元,它的生命周期管理是至关重要的,因为它直接影响到用户体验和应用性能。本文将详细探讨如何在Android中正确处理Activity的停止与重启。 Activity的生命周期包括...

    android入门学习笔记-永远不变的helloworld、初识activity

    - `public void onCreate(Bundle icicle)`:这是Activity生命周期中的一个重要方法,当Activity被创建时调用。`Bundle icicle`参数用于保存Activity的状态信息。 - `setTheme(android.R.style.Theme_Dark)`:设置...

    android学习笔记2--BroadcastReceiver

    需要注意的是,由于`onReceive()`的生命周期短暂,创建新线程进行耗时操作可能会导致线程未执行完BroadcastReceiver就已销毁。另外,在内存紧张时,系统会优先结束不包含任何活动组件的进程,这可能导致由...

    android 开发笔记

    开发者还会学习布局设计,使用XML来构建用户界面,并了解Android的生命周期管理。此外,可能会涉及到数据存储,如SQLite数据库的使用,以及SharedPreferences,用于保存轻量级的数据。 "Linux 6410"标签表明,这些...

Global site tag (gtag.js) - Google Analytics