Android的Activity生命周期
来源:互联网 发布:网络安全教育读后感 编辑:程序博客网 时间:2024/06/11 17:58
Android的Activity生命周期
1、在android中,Activity主要有几个生命周期函数,分别为:onCreate(),onStart(),onResume(),onPause(),onStop(),onRestart(),onDestory(),这里只是介绍activity的整个过程。
2、现在有一个Activity,叫MainActivity,其中实现了以上所有的方法,而在每个方法中就只是用系统命令输出了所在的Activity类和方法名,代码如下:
package com.example.activitycycle;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button bu = (Button)findViewById(R.id.nextActivity);bu.setOnClickListener(new OnClickListener(){ @Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent();intent.setClass(MainActivity.this, LittleActivity.class);MainActivity.this.startActivity(intent);} });System.out.println("MainActivity-onCreate");}@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubsuper.onSaveInstanceState(outState);}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("MainActivity-onDestoy");}@Overrideprotected void onPause() {super.onPause();System.out.println("MainActivity-onPause");}@Overrideprotected void onRestart() {super.onRestart();System.out.println("MainActivity-onRestart");}@Overrideprotected void onResume() {super.onResume();System.out.println("MainActivity-onResume");}@Overrideprotected void onStart() {super.onStart();System.out.println("MainActivity-onStart");}@Overrideprotected void onStop() {super.onStop();System.out.println("MainActivity-onStop");}}对应的xml布局文件叫activity_main.xml,只有一个文本域和两个按钮,代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/mainActivity" /> <Button android:id="@+id/littleActivityBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/littleActivityText"/> <Button android:id="@+id/FillActivityBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/fullActivityText"/></LinearLayout>
运行界面如图:
3、有一个activity,叫LIttleActivity,这个Activity类似于一个dialog,这个是在AndroidManifest.xml文件中,给Activity添加:android:theme="@android:style/Theme.Dialog"属性实现的,代码如下:
package com.example.activitycycle;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.View;public class LittleActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.little_activity);System.out.println("LittleActivity-onCreate");}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("LittleActivity-onDestoy");}@Overrideprotected void onPause() {super.onPause();System.out.println("LittleActivity-onPause");}@Overrideprotected void onRestart() {super.onRestart();System.out.println("LittleActivity-onRestart");}@Overrideprotected void onResume() {super.onResume();System.out.println("LittleActivity-onResume");}@Overrideprotected void onStart() {super.onStart();System.out.println("LittleActivity-onStart");} @Override protected void onStop() {super.onStop();System.out.println("LittleActivity-onStop");}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}public void finishDialog(View v) { this.finish(); }}
4、还有一个activity,叫做FillScreenActivity,这是一个普通的Activity,只有一个TextView,代码如下:
package com.example.activitycycle;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.View;public class FillScreenActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fillscreen_activity);System.out.println("FillScreenActivity-onCreate");}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("FillScreenActivity-onDestoy");}@Overrideprotected void onPause() {super.onPause();System.out.println("FillScreenActivity-onPause");}@Overrideprotected void onRestart() {super.onRestart();System.out.println("FillScreenActivity-onRestart");}@Overrideprotected void onResume() {super.onResume();System.out.println("FillScreenActivity-onResume");}@Overrideprotected void onStart() {super.onStart();System.out.println("FillScreenActivity-onStart");} @Override protected void onStop() {super.onStop();System.out.println("FillScreenActivity-onStop");}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}public void finishDialog(View v) { this.finish(); }}
5、当点击上图中的“全屏Activity”时,在logCat中添加一个Sysstem.out的过滤器,显示调用方法如图:
这时,logCat中的过滤器的输出如图:
这时再点击返回键时,返回初始的MainActivity的界面,过滤器的输出如图:
6、当点击“小的Activity”时,界面如图:
这个Activity类似一个Dialog,后面的MainActivity还可见,这时过滤器的输出如图:
当点击返回键时,这时过滤器的输出如图:
总结:
1、当启动一个Activity时,调用的方法是onCreate()->onStart()->onResume(),我的理解分别为,创建、启动、可见
2、根据上面的例子,有一个MainActivity,主要用于启动其他的两个Activity,这里简称M
有一个LittleActivlty,这个是一个Dialog形式的Activity,这里简称L
有一个FillScreenActivity,这个是一个普通的Activity,这里简称F
所以:
当启动MainActivity时,调用的方法是:onCreate(M)->onStart(M)->onResume(M);
当点击"全屏Activity"时,调用的方法是:onPause(M)->onCreate(F)->onStart(F)->onResume(F)->onStop(M);
这时点击返回键,调用的方法是:onPause(F)->onRestart(M)->onStart(M)->onResume(M)->onStop(F)->onDestory(F);
当点击“小的Activity”时,调用的方法是:onPause(M)->onCreate(L)->onStart(L)->onResume(L);
这时点击返回时,调用的方法是:onPause(L)->onResume(M)->onStop(L)->onDestory(L);
这里点击“小的Activity”和点击“全屏Activity”的方法调用有区别,原因是:
点击小的Activity时,小的Activity只是部分遮挡住了MainActivity,也就是说MainActivity还可见,但只是不能获得焦点,所以这里没有调用onStop(M)方法;
当点击返回键时,onPause(L)--暂停L,onResume(M)--让M可见,由于之前没有调用onStop(M)方法,所以,这里就直接调用onResume(M)让其可见,接着的就是销毁L了;
点击全屏的Activity时,由于第二个Activity完全遮挡住了第一个activity,所以需要调用onStop(M),当按返回键时,由于已经被调用onStop(M)停止了,所以需要从新启动,
调用方法是:onPause(F)--暂停F,onRestart(M)--从新启动M,onStart(M)--启动M,onResume(M)--让M可见,onStop(F)--停止F,onDestory(F)--销毁F,回收内存;
源代码可以在我的github上下载:https://github.com/GreatmanBill/android.git
转载请附上我的地址:http://blog.csdn.net/hello_ok_google/article/details/9075579
- Android activity的生命周期
- Android:Activity的生命周期
- Android Activity的生命周期
- Android Activity的生命周期
- Android Activity的生命周期
- Android activity的生命周期
- Android activity的生命周期
- Android activity的生命周期
- Android activity的生命周期
- Android Activity的生命周期
- Android activity的生命周期
- Android activity的生命周期
- android activity的生命周期
- Android activity的生命周期
- Android activity的生命周期
- Android activity的生命周期
- Android activity的生命周期
- Android Activity的生命周期
- CSS背景设置background
- Java压缩技术(五) GZIP相关——浏览器解析
- 如何增加虚拟机ubuntu的硬盘
- 高质量C++编程_第10章_类的继承和组合
- Java压缩技术(六) BZIP2——Commons实现
- Android的Activity生命周期
- listview刷新,延迟加载,用单行刷新取代notifyDataSetChanged
- C# 如何使自己的程序在“显示桌面”时不最小化
- Java压缩技术(七) TAR——Commons实现
- 日志分析的挂载的问题
- 回顾过去。。展望未来
- asp.net 生命周期
- (进程篇 详解 中)--深入理解linux内核
- 通过安卓API的Tabs3实现仿优酷tabhost效果