学习安卓,不可避免的要了解activity的生命周期。我们通过一些资料知道,activity有六个状态
分别是onCreate、onStart、onResume、onPause、onStop和onDestory。那么它们的调用时间以及顺序是怎么样的呢?学习他们,我们就能跟好的理解activity的工作过程,以便控制逻辑代码的书写。
为了便于观看activity的生命周期,我写了三个activity:
package com.example.test3; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.TextView; public class AActivity extends Activity { private TextView textView_lifecycle; private TextView Activity_status=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_a); textView_lifecycle=(TextView)this.findViewById(R.id.textView_lifecycle); Activity_status=(TextView)findViewById(R.id.textView_Activity_status); textView_lifecycle.append(" Activity A.onCreate\n"); Activity_status.setText("Activity A :create"); System.out.println("Activity A :create"); } public void onclick(View v){ Button btn=(Button)findViewById(v.getId()); String btnText=btn.getText().toString(); if(btnText.equals("Start B")){ //创建intent对象,实现页面跳转 Intent intents=new Intent(); intents.setClass(AActivity.this, BActivity.class); AActivity.this.startActivity(intents); } else if(btnText.equals("Start C")){ Intent intents=new Intent(); intents.setClass(AActivity.this, CActivity.class); AActivity.this.startActivity(intents); } else if(btnText.equals("Finish A")){ // android.os.Process.killProcess(android.os.Process.myPid()); finish(); } else{ new AlertDialog.Builder( AActivity.this).setTitle("登录失败!").setMessage("zhanghao:"). setPositiveButton("确定", null).show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.a, menu); return true; } @Override protected void onStart() { super.onStart(); textView_lifecycle.append(" Activity A.onStart\n"); Activity_status.setText("Activity A :Start"); System.out.println("Activity A :Start"); } //当按HOME键时,然后再次启动应用时,我们要恢复先前状态 @Override protected void onRestart() { super.onRestart(); textView_lifecycle.append(" Activity A.onReStart\n"); Activity_status.setText("Activity A :ReStart"); System.out.println("Activity A :ReStart"); } @Override protected void onResume() { super.onResume(); textView_lifecycle.append(" Activity A.onResume\n"); Activity_status.setText("Activity A :Resume"); System.out.println("Activity A :Resume"); } @Override protected void onPause() { super.onPause(); textView_lifecycle.append(" Activity A.onPause\n"); Activity_status.setText("Activity A :Pause"); System.out.println("Activity A :Pause"); } @Override protected void onStop() { super.onStop(); textView_lifecycle.append(" Activity A.onStop\n"); Activity_status.setText("Activity A :Stop"); System.out.println("Activity A :Stop"); } @Override protected void onDestroy() { super.onDestroy(); textView_lifecycle.append(" Activity A.onDestroy\n"); Activity_status.setText("Activity A :Destroy"); System.out.println("Activity A :Destroy"); } }
package com.example.test3; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.TextView; public class BActivity extends Activity { private TextView textView_lifecycle; private TextView Activity_status=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_b); textView_lifecycle=(TextView)this.findViewById(R.id.textView_lifecycle); Activity_status=(TextView)findViewById(R.id.textView_Activity_status); textView_lifecycle.append(" Activity B.onCreate\n"); Activity_status.setText("Activity B :create"); System.out.println("Activity B :create"); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.b, menu); return true; } public void onclick(View v){ Button btn=(Button)findViewById(v.getId()); String btnText=btn.getText().toString(); if(btnText.equals("Start A")){ //创建intent对象,实现页面跳转 Intent intents=new Intent(); intents.setClass(BActivity.this, AActivity.class); BActivity.this.startActivity(intents); } else if(btnText.equals("Start C")){ Intent intents=new Intent(); intents.setClass(BActivity.this, CActivity.class); BActivity.this.startActivity(intents); } else if(btnText.equals("Finish B")){ // android.os.Process.killProcess(android.os.Process.myPid()); finish(); } else{ new AlertDialog.Builder( BActivity.this).setTitle("登录失败!").setMessage("zhanghao:"). setPositiveButton("确定", null).show(); } } @Override protected void onStart() { super.onStart(); System.out.println("Activity B :Start"); textView_lifecycle.append(" Activity B.onStart\n"); Activity_status.setText("Activity B :Start"); } //当按HOME键时,然后再次启动应用时,我们要恢复先前状态 @Override protected void onRestart() { super.onRestart(); textView_lifecycle.append(" Activity B.onReStart\n"); Activity_status.setText("Activity B :ReStart"); System.out.println("Activity B :ReStart"); } @Override protected void onResume() { super.onResume(); textView_lifecycle.append(" Activity B.onResume\n"); Activity_status.setText("Activity B :Resume"); System.out.println("Activity B :Resume"); } @Override protected void onPause() { super.onPause(); textView_lifecycle.append(" Activity B.onPause\n"); Activity_status.setText("Activity B :Pause"); System.out.println("Activity B :Pause"); } @Override protected void onStop() { super.onStop(); textView_lifecycle.append(" Activity B.onStop\n"); Activity_status.setText("Activity B :Stop"); System.out.println("Activity B :Stop"); } @Override protected void onDestroy() { super.onDestroy(); textView_lifecycle.append(" Activity B.onDestroy\n"); Activity_status.setText("Activity B :Destroy"); System.out.println("Activity B :Destroy"); } }
package com.example.test3; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.UserHandle; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; import android.content.ServiceConnection; import android.content.SharedPreferences; import android.content.IntentSender.SendIntentException; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.AssetManager; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.Resources.Theme; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.view.Display; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.TextView; public class CActivity extends Activity { private TextView textView_lifecycle; private TextView Activity_status=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_c); textView_lifecycle=(TextView)this.findViewById(R.id.textView_lifecycle); Activity_status=(TextView)findViewById(R.id.textView_Activity_status); textView_lifecycle.append(" Activity C.onCreate\n"); Activity_status.setText("Activity C :create"); System.out.println("Activity C :create"); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.c, menu); return true; } public void onclick(View v){ Button btn=(Button)findViewById(v.getId()); String btnText=btn.getText().toString(); if(btnText.equals("Start A")){ //创建intent对象,实现页面跳转 Intent intents=new Intent(); intents.setClass(CActivity.this, AActivity.class); CActivity.this.startActivity(intents); } else if(btnText.equals("Start B")){ Intent intents=new Intent(); intents.setClass(CActivity.this, BActivity.class); CActivity.this.startActivity(intents); } else if(btnText.equals("Finish C")){ // android.os.Process.killProcess(android.os.Process.myPid()); finish(); } else{ new AlertDialog.Builder( CActivity.this).setTitle("Simple Dialog"). setPositiveButton("close", null).show(); } } @Override protected void onStart() { super.onStart(); textView_lifecycle.append(" Activity C.onStart\n"); Activity_status.setText("Activity C :Start"); System.out.println("Activity C.onStart"); } @Override protected void onRestart() { super.onRestart(); textView_lifecycle.append(" Activity C.onReStart\n"); Activity_status.setText("Activity C :ReStart"); System.out.println("Activity C :ReStart"); } @Override protected void onResume() { super.onResume(); textView_lifecycle.append(" Activity C.onResume\n"); Activity_status.setText("Activity C :Resume"); System.out.println("Activity C :Resume"); } @Override protected void onPause() { super.onPause(); textView_lifecycle.append(" Activity C.onPause\n"); Activity_status.setText("Activity C :Pause"); System.out.println("Activity C :Pause"); } @Override protected void onStop() { super.onStop(); textView_lifecycle.append(" Activity C.onStop\n"); Activity_status.setText("Activity C :Stop"); System.out.println("Activity C :Stop"); } @Override protected void onDestroy() { super.onDestroy(); textView_lifecycle.append(" Activity C.onDestroy\n"); Activity_status.setText("Activity C :Destroy"); System.out.println("Activity C :Destroy"); } }
对应的xml文件如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#1E90FF" android:orientation="vertical" android:paddingTop="3dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="@string/title_activity_a_text" android:textSize="30sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/Start_B_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="onclick" android:text="@string/Start_B_btn" /> <Button android:id="@+id/Start_C_btn" android:layout_width="wrap_content" android:layout_weight="1" android:layout_height="wrap_content" android:onClick="onclick" android:text="@string/Start_C_btn" /> <Button android:id="@+id/finish_a_btn" android:layout_width="wrap_content" android:layout_weight="1" android:layout_height="wrap_content" android:onClick="onclick" android:text="@string/finish_a_btn" /> <Button android:id="@+id/Dialog_btn" android:layout_width="wrap_content" android:layout_weight="1" android:layout_height="wrap_content" android:onClick="onclick" android:text="@string/Dialog_btn" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:text="@string/life_cycle_text" android:textSize="20sp" /> <TextView android:id="@+id/textView_lifecycle" android:layout_width="300dp" android:layout_height="150dp" android:layout_gravity="center_horizontal" android:background="#ffffff" android:text="" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="@string/Activity_status_text" android:textSize="20sp" /> <TextView android:id="@+id/textView_Activity_status" android:layout_width="300dp" android:layout_height="30dp" android:layout_gravity="center_horizontal" android:background="#ffffff" android:text="" /> </LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#6B8E23" android:orientation="vertical" android:paddingTop="3dp" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="@string/title_activity_b_text" android:textSize="30sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onclick" android:text="@string/Start_A_btn" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onclick" android:text="@string/Start_C_btn" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onclick" android:text="@string/finish_b_btn" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onclick" android:text="@string/Dialog_btn" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="@string/life_cycle_text" android:textSize="20sp" /> <TextView android:id="@+id/textView_lifecycle" android:layout_width="300dp" android:layout_height="150dp" android:layout_gravity="center_horizontal" android:background="#ffffff" android:text="" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:text="@string/Activity_status_text" android:textSize="20sp" /> <TextView android:id="@+id/textView_Activity_status" android:layout_width="300dp" android:layout_height="50dp" android:layout_gravity="center_horizontal" android:background="#ffffff" android:text="" /> </LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FF0000" android:orientation="vertical" android:paddingTop="3dp" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="@string/title_activity_c_text" android:textSize="30sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onclick" android:text="@string/Start_A_btn" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onclick" android:text="@string/Start_B_btn" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onclick" android:text="@string/finish_c_btn" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onclick" android:text="@string/Dialog_btn" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="@string/life_cycle_text" android:textSize="20sp" /> <TextView android:id="@+id/textView_lifecycle" android:layout_width="300dp" android:layout_height="150dp" android:layout_gravity="center_horizontal" android:background="#ffffff" android:text="" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:text="@string/Activity_status_text" android:textSize="20sp" /> <TextView android:id="@+id/textView_Activity_status" android:layout_width="300dp" android:layout_height="50dp" android:layout_gravity="center_horizontal" android:background="#ffffff" android:text="" /> </LinearLayout>
运行程序:
点击Start B
点击Start C
,后点回退键
谷歌官方给出的activity的生命周期为:
总结各个状态的表现及特点
onCreate 视图创建但不可见,存在于内存中;
onStart 视图可见,但不可交互;
onResume 可交互,最常见的一种状态,app正常使用时的状态
onPause 视图可见,不可交互
onStop 视图不可见,但存在于内存中,占据内存空间
onDestory activity销毁时调用,销毁后生命周期结束
相关推荐
Activity生命周期
Activity生命周期源代码 Activity生命周期源代码 Activity生命周期源代码
很好的一张Activity生命周期图,可以很清楚了解Activity生命周期的流程图
activity生命周期详解,http://blog.csdn.net/huiblog/article/details/53292490
日志追踪(完成以下六步、明白android的四种状态的生命周期和相互切换): 1、启动app、查看控制台输出,发现依次触发onCreate、onStart、onResume这三个方法 2、点击按钮(弹窗风格的Activity),控制台输出onPause...
实验一 第一个Android程序和Activity生命周期。实验要求: 1.用工程向导生成第一个Android程序,并在模拟器上运行 注意在新建应用的选择SDK版本时选API 18 2.熟悉Android应用程序的基本文件结构 3.了解使用开发环境...
andriod 开发之 Activity生命周期总结,
Activity7大生命周期与4种启动模式(standard,singleTop,singleTask,singleIntance)
Activity生命周期Demo
详细描述 Android四大控件之一的Activity的生命周期,以及使用注意事项
一个测试Activity生命周期的小DEMO。
深入理解Activity生命周期示例代码.
Android Activity生命周期演示源码,从第一个Activity到第二个Activity,Android Activity形象的说就是一个容器,在里面放置各种控件(按钮,文本,复选框等),就形成了软件的界面~ Activity是可见的。
Activity生命周期 启动模式实例
Activity生命周期运行时序图,需要了解的可以下载看看
Activity生命周期的完美呈现,通过一个简单的项目,可以比较好地理解Activity的整个生命周期,对于初学者有一定的帮助!
activity生命周期、线程优先级、异常销毁、任务栈 参考代码
Activity生命周期及Intent传值
主要讲讲: 何时onPause, 何时onStop,何时onDestory; 以及恢复的时候,何时onRestart,何时onResume。
基于Android Studio,通过简单的实例分析Activity的生命周期