Android 开发入门-活动的生命周期

2.4.1 返回栈

每启动一个新的活动,会在返回栈中入栈,并处于栈顶的位置。每销毁一个活动,处于栈顶的活动会出栈,前一个入栈的活动会重新处于栈顶的位置。

2.4.2 活动状态

  1. 运行状态:位于返回栈栈顶的活动。
  2. 暂停状态:不在栈顶位置,但仍然可见。
  3. 停止状态:不在栈顶位置,完全不可见。可能会被系统回收。
  4. 销毁状态:在返回栈中移除的活动。

2.4.3 活动的生存期

  • onCreate():活动第一次被创建时调用,在此方法中完成活动的初始化工作。
  • onStart():活动由不可见变为可见时调用。
  • onResume():在活动准备好和用户进行交互时调用。此时活动位于栈顶,并处于运行状态。
  • onPause():系统准备去启动或恢复另一个活动时调用。启动新的对话框活动,此方法会被调用。
  • onStop():在活动完全不可见时调用。启动新的对话框活动,此方法不会被调用。
  • onDestroy():活动被销毁前被调用。
  • onRestart():活动由停止状态变为运行状态前调用。

可以将活动分为3中生存期:

  • 完整生存期。在 onCreate() 和 onDestroy() 之间所经历的。
  • 可见生存期。在 onStart() 和 onStop() 之间所经历的。
  • 前台生存期。在 onResume() 和 onPause() 之间所经历的。

2.4.4 体验活动的生命周期

# app/src/main/res/layout/normal_layout.xml




    

# app/src/main/res/layout/dialog_layout.xml




    

# app/src/main/AndroidManifest.xml




    
        
            
                
                
            
        
        
        
        
        
    

# app/src/main/res/layout/activity_main.xml




    
# app/src/main/java/com/example/activitylifecycletest/MainActivity.java

public class MainActivity extends AppCompatActivity {

    public static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        setContentView(R.layout.activity_main);
        Button startNormalActivity = (Button) findViewById(R.id.start_normal_activity);
        Button startDialogActivity = (Button) findViewById(R.id.start_dialog_activity);
        
        // 启动 NormalActivity 活动
        startNormalActivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, NormalActivity.class);
                startActivity(intent);
            }
        });
        
        // 启动 DialogActivity 活动
        startDialogActivity.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");
    }

    @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");
    }

}

程序启动:Create - Start - Resume

按钮一:Pause - Stop

返回按钮:Restart - Start - Resume

退出程序:Pause - Stop - Destroy

程序启动:Create - Start - Resume

按钮二:Pause

返回按钮:Resume

退出程序:Pause - Stop - Destroy

2.4.5 活动被回收了怎么办

活动进入停止状态,可能会被系统回收。用户返回活动后,活动不会执行 onRestart() 方法,而是会执行 onCreate() 方法,重新创建一次该活动。

Android 提供了 onSaveInstanceState() 回调方法,保证在活动被回收前被调用,可用于保存上一个活动的临时数据:

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        // 保存临时数据
        String tempData = "Something you just typed";
        outState.putString("data_key", tempData);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        setContentView(R.layout.activity_main);
        // 取出临时数据
        if(savedInstanceState != null) {
            String tempData = savedInstanceState.getString("data_key");
            Log.d(TAG, tempData);
        }
    }

你可能感兴趣的:(android)