Activity笔记(三)

活动的生命周期

返回栈

Android使用任务来管理活动,一个任务就是一组存放在栈里的活动集合,也称之为返回栈,这个栈的理解类似于数据结构的栈,后进先出。
启动新的活动就会入栈,并在栈顶。当用户点击返回键或者程序执行了finish()方法后,该活动就会出栈。前一个活动就成为了栈顶活动。系统总会显示栈顶的活动给用户。

活动状态

  • 运行状态

处于栈顶且可见
优先级最高,系统基本不会回收

  • 暂停状态

不处于栈顶但是可见
优先级其次,系统一般不会回收,只有在系统内存及其低的时候才会考虑回收

  • 停止状态

不处于栈顶且不可见,系统仍然会保存相应的状态和成员变量但是不可靠,如果其他地方需要内存就会回收

  • 销毁状态

从返回栈移除后就变成了销毁状态,内存回收积极

活动生存期

Activity类中定义了7个回调方法,覆盖活动周期的每一个环节

  • onCreate() 方法

活动第一次创建的时候调用,一般完成活动的初始化。例如加载布局和绑定事件等
* onStart() 方法

活动由不可见到可见

  • onResume() 方法
    活动准备好和用户交互,此时活动一定处于栈顶而且处于运行状态

  • onPause() 方法

系统准备启动或者恢复另一个活动。

  • onStop() 方法

活动不可见的时候调用,它和onPause()的方法区别在于如果活动是对话框的形式,那么onStop方法不会被执行而onPause方法可以被执行

  • onDestroy() 方法

活动呗销毁之前调用,之后活动状态将变为销毁状态

  • onRestart() 方法

停止状态变为运行状态之前调用,也就是活动呗重新加工启动了。

实例

  • 创建一个项目默认MainActivity 再创建一个Activity

NormalActivity布局


<?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"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="This is a dialog view" /> </LinearLayout>

MaiActivity布局


<?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:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="activity.dmeo.test3.MainActivity"> <Button android:id="@+id/main_btn1" android:layout_width="150dp" android:layout_height="50dp" android:text="btn1" /> <Button android:id="@+id/main_btn2" android:layout_width="150dp" android:layout_height="50dp" android:text="btn2" /> </LinearLayout>

MaiActivity


public static final String TAG = "MainActivity"; /** * 活动第一次创建的时候调用,一般完成活动的初始化。例如加载布局和绑定事件等 * @param savedInstanceState */ @Override protected void onCreate(Bundle savedInstanceState) { Log.d(TAG,"onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 调用临时保存的数据 if (savedInstanceState!=null){ String tempData = savedInstanceState.getString("tempData"); Log.d(TAG,tempData); } //启动normalActivity Button button = (Button)findViewById(R.id.main_btn1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,NormalActivity.class); startActivity(intent); } }); //启动dialogActivity Button button1 = (Button)findViewById(R.id.main_btn2); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, DialogActivity.class); startActivity(intent); } }); } /** * 活动由不可见到可见 */ @Override protected void onStart() { super.onStart(); Log.d(TAG,"onStart"); } /** * 活动准备好和用户交互,此时活动一定处于栈顶而且处于运行状态 */ @Override protected void onResume() { super.onResume(); Log.d(TAG,"onResume"); } /** * 系统准备启动或者恢复另一个活动。 */ @Override protected void onPause() { super.onPause(); Log.d(TAG,"onPause"); } /** * 活动不可见的时候调用,它和onPause() * 的方法区别在于如果活动是对话框的形式, * 那么onStop方法不会被执行而onPause方法可以被执行 */ @Override protected void onStop() { super.onStop(); Log.d(TAG,"onStop"); } /** * 活动呗销毁之前调用,之后活动状态将变为销毁状态 * */ @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG,"onDestroy"); } /** * 停止状态变为运行状态之前调用,也就是活动呗重新加工启动了 */ @Override protected void onRestart() { super.onRestart(); Log.d(TAG,"onRestart"); } /** * Bundle 提供了一系列的方法用于保存数据 例如putString() *保存字符串 * @param outState * * 数据的恢复 * 在onCreate()方法里也有一个Bundle参数,一般为null 这个参数就携带了 * 保存的数据 */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); String Data="临时数据"; outState.putString("tempData",Data); }

发表评论