zoukankan      html  css  js  c++  java
  • android之Activity的生命周期

    1、Activity简单介绍:

    Activity能够简单理解为android手机应用程序中的每个界面。

    其有对应的实现Activity类的java类文件(相当于手机界面控制相关逻辑的文件,类似flex页面的脚本文件,或者常见页面形式中的js),

    也有响应的布局xml文件,预先设置好响应的布局控件及其大小、颜色等属性。

    每个Activity都须要在AndroidManifest.xml文件里注冊,类似于javaweb中servlet,listener须要在web.xml中注冊一样。

    2、Activity的生命周期图,例如以下:


    简单几个阶段说明:

        1)、例如说打开一个登录Activity,名为LoginActivity。该LoginActivity会先运行onCreate。onStart,onResume方法。完毕登录界面的初始化。

        2)、若用户点击返回导航到主菜单,则运行LoginActivity的onPause,OnStop(用户看不到登录界面时运行),OnDestory方法

              onRestart在以下使用案例说明。

    3、案例说明:

        简单介绍:总共两个界面。一个主界面,名为TestLifeCycleActivity(需在),一个点击主界面上的button转到的子界面,名为TestLifeCycleActivity2,代码及布局文件例如以下:

    TestLifeCycleActivity.java

    package com.example.helloworld;
    
    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 TestLifeCycleActivity extends Activity {
    
    	private int i = 1;
    	private Button test_life_cycle_btn1 = null;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.test_life_cycle);
    		
    		System.err.println(i + "、" + "TestLifeCycleActivity onCreate");
    		i++;
    		
    		findView();
    		test_life_cycle_btn1.setOnClickListener(new OnClickListener() {
    			
    		Intent intent = new Intent(TestLifeCycleActivity.this,
    				TestLifeCycleActivity2.class);
    
    			@Override
    			public void onClick(View view) {
    				TestLifeCycleActivity.this.startActivity(intent);
    			}
    		});
    	}
    
    	private void findView(){
    		test_life_cycle_btn1 = (Button) findViewById(R.id.test_life_cycle_btn1);
    	}
    
    	@Override
    	protected void onDestroy() {
    		super.onDestroy();
    		System.err.println(i + "、" + "TestLifeCycleActivity onDestroy");
    		i++;
    	}
    
    	@Override
    	protected void onPause() {
    		super.onPause();
    		System.err.println(i + "、" + "TestLifeCycleActivity onPause");
    		i++;
    	}
    
    	@Override
    	protected void onRestart() {
    		super.onRestart();
    		System.err.println(i + "、" + "TestLifeCycleActivity onRestart");
    		i++;
    	}
    
    	@Override
    	protected void onResume() {
    		super.onResume();
    		System.err.println(i + "、" + "TestLifeCycleActivity onResume");
    		i++;
    	}
    
    	@Override
    	protected void onStart() {
    		super.onStart();
    		System.err.println(i + "、" + "TestLifeCycleActivity onStart");
    		i++;
    	}
    
    	@Override
    	protected void onStop() {
    		super.onStop();
    		System.err.println(i + "、" + "TestLifeCycleActivity onStop");
    		i++;
    	}
    
    }
    

    TestLifeCycleActivity2 .java

    package com.example.helloworld;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class TestLifeCycleActivity2 extends Activity {
    
    	private int i = 1;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.test_life_cycle2);
    		
    		System.err.println(i + "、" + "TestLifeCycleActivity2 onCreate");
    		i++;
    		
    	}
    
    	@Override
    	protected void onDestroy() {
    		super.onDestroy();
    		System.err.println(i + "、" + "TestLifeCycleActivity2 onDestroy");
    		i++;
    	}
    
    	@Override
    	protected void onPause() {
    		super.onPause();
    		System.err.println(i + "、" + "TestLifeCycleActivity2 onPause");
    		i++;
    	}
    
    	@Override
    	protected void onRestart() {
    		super.onRestart();
    		System.err.println(i + "、" + "TestLifeCycleActivity2 onRestart");
    		i++;
    	}
    
    	@Override
    	protected void onResume() {
    		super.onResume();
    		System.err.println(i + "、" + "TestLifeCycleActivity2 onResume");
    		i++;
    	}
    
    	@Override
    	protected void onStart() {
    		super.onStart();
    		System.err.println(i + "、" + "TestLifeCycleActivity2 onStart");
    		i++;
    	}
    
    	@Override
    	protected void onStop() {
    		super.onStop();
    		System.err.println(i + "、" + "TestLifeCycleActivity2 onStop");
    		i++;
    	}
    
    }
    

    TestLifeCycleActivity布局文件。仅有一个button。转到子界面:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        
    	<Button android:id="@+id/test_life_cycle_btn1"
    	    android:layout_width="fill_parent"
    		android:layout_height="wrap_content"
    		android:text="測试Activity生命周期"/>
    </LinearLayout>
    


    TestLifeCycleActivity2布局文件例如以下。无内容:

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

    > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </LinearLayout>


    在AndroidManifest.xml中注冊主界面与子界面:

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

    > <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.helloworld" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.helloworld.TestLifeCycleActivity" 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="com.example.helloworld.TestLifeCycleActivity2"> </activity> </application> </manifest>


    測试过程1——点击主界面的button,转到子界面,然后点击返回导航,回到主界面。各个生命周期的方法运行例如以下:

    05-14 10:54:19.012: W/System.err(1862): 1、TestLifeCycleActivity onCreate
    05-14 10:54:19.012: W/System.err(1862): 2、TestLifeCycleActivity onStart
    05-14 10:54:19.041: W/System.err(1862): 3、TestLifeCycleActivity onResume     -- 以上三个为主界面的初始化
    05-14 10:54:23.481: W/System.err(1862): 4、TestLifeCycleActivity onPause      -- 点击button后将要转到子界面。先暂停主界面
    05-14 10:54:25.241: W/System.err(1862): 1、TestLifeCycleActivity2 onCreate    
    05-14 10:54:25.251: W/System.err(1862): 2、TestLifeCycleActivity2 onStart
    05-14 10:54:25.281: W/System.err(1862): 3、TestLifeCycleActivity2 onResume    -- 初始化子界面。此时子界面被渲染。占领屏幕最前端
    05-14 10:54:27.551: W/System.err(1862): 5、TestLifeCycleActivity onStop       -- 主界面不可见,运行主界面的stop方法
    05-14 10:55:11.742: W/System.err(1862): 4、TestLifeCycleActivity2 onPause     -- 点击返回导航时,暂停子界面
    05-14 10:55:11.802: W/System.err(1862): 6、TestLifeCycleActivity onRestart    -- 运行主界面的restart方法
    05-14 10:55:11.802: W/System.err(1862): 7、TestLifeCycleActivity onStart      -- 运行主界面的start方法
    05-14 10:55:11.813: W/System.err(1862): 8、TestLifeCycleActivity onResume     -- 运行主界面的onResume方法,又一次開始渲染主界面,此时主界面在屏幕最前端
    05-14 10:55:13.354: W/System.err(1862): 5、TestLifeCycleActivity2 onStop      -- 子界面不可见。运行子界面onStop方法
    05-14 10:55:13.362: W/System.err(1862): 6、TestLifeCycleActivity2 onDestroy   -- 销毁子界面
    

    測试过程2——点击主界面的button,将要弹出子界面。此时狂点返回导航,直至退出HelloWorld程序,返回到手机,主界面与子界面各个生命周期的方法运行例如以下:

    05-14 10:56:50.281: W/System.err(1862): 1、TestLifeCycleActivity onCreate
    05-14 10:56:50.301: W/System.err(1862): 2、TestLifeCycleActivity onStart
    05-14 10:56:50.391: W/System.err(1862): 3、TestLifeCycleActivity onResume     -- 主界面初始化渲染
    05-14 10:56:55.331: W/System.err(1862): 4、TestLifeCycleActivity onPause      -- 子界面将要占领手机屏幕,暂停主界面
    05-14 10:56:56.411: W/System.err(1862): 1、TestLifeCycleActivity2 onCreate    
    05-14 10:56:56.421: W/System.err(1862): 2、TestLifeCycleActivity2 onStart
    05-14 10:56:56.441: W/System.err(1862): 3、TestLifeCycleActivity2 onResume   -- 子界面渲染
    05-14 10:56:58.051: W/System.err(1862): 4、TestLifeCycleActivity2 onPause    -- 主界面将要占领手机屏幕。暂停子界面
    05-14 10:56:58.261: W/System.err(1862): 5、TestLifeCycleActivity onResume    -- 用户点击返回导航到主界面,运行主界面OnResume。由于子界面没有来得及占领手机屏幕,所以主界面此时仍然可见,则不会运行其OnStop方法
    05-14 10:56:59.111: W/System.err(1862): 5、TestLifeCycleActivity2 onStop     -- 子界面不可见,运行onStop方法
    05-14 10:56:59.111: W/System.err(1862): 6、TestLifeCycleActivity2 onDestroy  -- 销毁子界面
    05-14 10:56:59.521: W/System.err(1862): 6、TestLifeCycleActivity onPause     -- 用户点击多次返回导航,退回到主界面后,接着退出主界面,到手机桌面,则需暂停主界面
    05-14 10:57:04.571: W/System.err(1862): 7、TestLifeCycleActivity onStop      -- 接着主界面不可见。停止主界面
    05-14 10:57:04.571: W/System.err(1862): 8、TestLifeCycleActivity onDestroy   -- 接着销毁主界面
    



  • 相关阅读:
    ORACLE 查看进程数,已执行任务数, 剩余任务数,删除指定任务
    ORACLE 收集统计整个用户数据
    解决Hystrix dashboard Turbine 一直 Loading…… 及其他坑
    利用 Maven 构造 Spring Cloud 微服务架构 模块使用 spring Boot构建
    AES加解密
    JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案
    JAVA 文件的上传下载
    shell启停服务脚本模板
    JAVA 设计模式之 原型模式详解
    JAVA 设计模式之 工厂模式详解
  • 原文地址:https://www.cnblogs.com/llguanli/p/6788978.html
Copyright © 2011-2022 走看看