博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android之Activity的生命周期
阅读量:6954 次
发布时间:2019-06-27

本文共 7291 字,大约阅读时间需要 24 分钟。

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。转到子界面:

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

> <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中注冊主界面与子界面:

> <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 onCreate05-14 10:54:19.012: W/System.err(1862): 2、TestLifeCycleActivity onStart05-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 onStart05-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 onCreate05-14 10:56:50.301: W/System.err(1862): 2、TestLifeCycleActivity onStart05-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 onStart05-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   -- 接着销毁主界面

你可能感兴趣的文章
使用gearman进行异步的邮件或短信发送
查看>>
5.20 Stacks and Queues
查看>>
Pyhton TestCase运行闪退与失败,原因不详。。。
查看>>
linux下性能监控
查看>>
L4.三.元祖md
查看>>
Zabbix数据库表分区
查看>>
自动化运维工具之ansible
查看>>
XGBoost:在Python中使用XGBoost
查看>>
HDU 4687 Boke and Tsukkomi
查看>>
一个例子看懂所有nodejs的官方网络demo
查看>>
全文检索
查看>>
JSP三种常用注释
查看>>
iOS开发——高级技术&地图功能的实现
查看>>
SVN服务器搭建和使用(一)
查看>>
Android Studio 默认的快捷键
查看>>
FindWindow 查找窗口
查看>>
3027 线段覆盖 2
查看>>
JDBC处理文本和二进制文件
查看>>
菜单联动 加翻页
查看>>
GDB中打印ART基础类
查看>>