Activity生命周期(设备旋转)

通过日志跟踪理解:

  输出日志信息:

     Android的android.util.Log类能够发送日志信息到系统级别的共享日志中心。Log类有好几个日志记录方法,其中一种为:

       public static int d (String d,  String msg)

    d代表debug的意思,用来表示日志级别。第一个参数表示日志的来源,第二个参数表示日志的具体能容。该方法的第一个参数通常以类名为值的TAG常量传入。  private static final String TAG = "MainActivity" 

public class MainActivity extends AppCompatActivity {
    private TextView mTextView;
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG,"onCreate(Bundle) called");
        setContentView(R.layout.activity_main);

    }
    @Override
    protected void onStart() {

        super.onStart();
        Log.d(TAG,"onStart() called");
    }
    @Override
    protected void onResume() {

        super.onResume();
        Log.d(TAG,"onResume() called");
    }
    @Override
    protected void onPause() {

        super.onPause();
        Log.d(TAG,"onPause() called");
    }
    @Override
    protected void onStop() {

        super.onStop();
        Log.d(TAG,"onStop() called");
    }
    @Override
    protected void onRestart() {

        super.onRestart();
        Log.d(TAG,"onRestart() called");
    }
    @Override
    protected void onDestroy() {

        super.onDestroy();
        Log.d(TAG,"onDestroy() called");
    }
}

打开LogCat查看日志,LogCat面板右上角的过滤器下拉列表里点击Edit Filter Configuration选项创建消息过滤器,在Name处输入MainActivity,by Log Tag处同样输入MainAvtivity,点击OK完成。

以下为追踪内容:

当点击RunApp时,Activity被创建,日志内容:

07-09 13:30:05.430 15569-15569/com.example.myapplication D/MainActivity: onCreate(Bundle) called
07-09 13:30:05.652 15569-15569/com.example.myapplication D/MainActivity: onStart() called

07-09 13:30:05.656 15569-15569/com.example.myapplication D/MainActivity: onResume() called

Activity is running 

当点击home时:

07-09 13:30:05.430 15569-15569/com.example.myapplication D/MainActivity: onCreate(Bundle) called
07-09 13:30:05.652 15569-15569/com.example.myapplication D/MainActivity: onStart() called
07-09 13:30:05.656 15569-15569/com.example.myapplication D/MainActivity: onResume() called
07-09 13:32:02.138 15569-15569/com.example.myapplication D/MainActivity: onPause() called

07-09 13:32:02.194 15569-15569/com.example.myapplication D/MainActivity: onStop() called

从home中找回Activity时,即Activity重新进入焦距状态时:

07-09 13:30:05.430 15569-15569/com.example.myapplication D/MainActivity: onCreate(Bundle) called
07-09 13:30:05.652 15569-15569/com.example.myapplication D/MainActivity: onStart() called
07-09 13:30:05.656 15569-15569/com.example.myapplication D/MainActivity: onResume() called
07-09 13:32:02.138 15569-15569/com.example.myapplication D/MainActivity: onPause() called
07-09 13:32:02.194 15569-15569/com.example.myapplication D/MainActivity: onStop() called
07-09 13:33:26.229 15569-15569/com.example.myapplication D/MainActivity: onRestart() called
07-09 13:33:26.277 15569-15569/com.example.myapplication D/MainActivity: onStart() called

07-09 13:33:26.283 15569-15569/com.example.myapplication D/MainActivity: onResume() called

点击back时:

07-09 13:30:05.430 15569-15569/com.example.myapplication D/MainActivity: onCreate(Bundle) called
07-09 13:30:05.652 15569-15569/com.example.myapplication D/MainActivity: onStart() called
07-09 13:30:05.656 15569-15569/com.example.myapplication D/MainActivity: onResume() called
07-09 13:32:02.138 15569-15569/com.example.myapplication D/MainActivity: onPause() called
07-09 13:32:02.194 15569-15569/com.example.myapplication D/MainActivity: onStop() called
07-09 13:33:26.229 15569-15569/com.example.myapplication D/MainActivity: onRestart() called
07-09 13:33:26.277 15569-15569/com.example.myapplication D/MainActivity: onStart() called
07-09 13:33:26.283 15569-15569/com.example.myapplication D/MainActivity: onResume() called
07-09 13:34:15.287 15569-15569/com.example.myapplication D/MainActivity: onPause() called
07-09 13:34:16.116 15569-15569/com.example.myapplication D/MainActivity: onStop() called

07-09 13:34:16.121 15569-15569/com.example.myapplication D/MainActivity: onDestroy() called

以下为设备旋转情况:

点击app进入时:

07-09 13:35:24.349 15698-15698/com.example.myapplication D/MainActivity: onCreate(Bundle) called
07-09 13:35:24.616 15698-15698/com.example.myapplication D/MainActivity: onStart() called

07-09 13:35:24.617 15698-15698/com.example.myapplication D/MainActivity: onResume() called

点击旋转:

07-09 13:35:24.349 15698-15698/com.example.myapplication D/MainActivity: onCreate(Bundle) called
07-09 13:35:24.616 15698-15698/com.example.myapplication D/MainActivity: onStart() called
07-09 13:35:24.617 15698-15698/com.example.myapplication D/MainActivity: onResume() called
07-09 13:36:40.968 15698-15698/com.example.myapplication D/MainActivity: onPause() called
07-09 13:36:40.979 15698-15698/com.example.myapplication D/MainActivity: onStop() called
07-09 13:36:40.982 15698-15698/com.example.myapplication D/MainActivity: onDestroy() called
07-09 13:36:41.100 15698-15698/com.example.myapplication D/MainActivity: onCreate(Bundle) called
07-09 13:36:41.138 15698-15698/com.example.myapplication D/MainActivity: onStart() called

07-09 13:36:41.141 15698-15698/com.example.myapplication D/MainActivity: onResume() called

由此可以看出Activity先被销毁再创建。那么问题来了,数据怎么保存? 从上述日志可以看出我们得在旋转前对数据进行保存,这里我们可以使用 protected void onStaveInState(Bundle outState),该方法在onPause(),onStop(),onDestroy()前由系统调用及数据存放在Bundle中,然后再onCreate()中取回数据。

打开MainActivity.java文件,新增一个常量作为将要存储再bundle中的键值对的键。如下:

private static final String KEY_INDEX = ”index“;

然后,覆盖onSaveInstanceState(....)方法,以上面新增的常量的值作为键,将变量的值保存到bundle中。

最后再onCreate()中确认是否成功获取该数值。

添加:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG,"onCreate(Bundle) called");
    setContentView(R.layout.activity_main);

 
 
if(savedInstanceState != null){
    mTextView = savedInstanceState.getInt(KEY_INDEX,0);  
}
} @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); Log. i( TAG, "onSaveInstanceState"); savedInstanceState.putInt( KEY_INDEX, mTextView);}

猜你喜欢

转载自blog.csdn.net/afcm1994716/article/details/80977418
今日推荐