Activity的生命周期方法

来源:互联网 发布:windows 新增api 编辑:程序博客网 时间:2024/06/04 19:58

直接看代码

public class SecondActivity extends Activity {    private Button but ,but1 ;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView( R.layout.secondlayout);        but = (Button) findViewById( R.id.but2);        but1 = (Button) findViewById( R.id.but22);        but.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent();                intent.setClass( SecondActivity.this , ThirdActivity.class);                startActivity( intent );            }        });        but1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                finish();            }        });        System.out.println(" =======> onCreate");    }    @Override    protected void onStart() {        super.onStart();        System.out.println(" =======> onStart");    }    @Override    protected void onResume() {        super.onResume();        System.out.println(" =======> onResume");    }    @Override    protected void onPause() {        super.onPause();        System.out.println(" =======> onPause");    }    @Override    protected void onStop() {        super.onStop();        System.out.println(" =======> onStop");    }    @Override    protected void onDestroy() {        super.onDestroy();        System.out.println(" =======> onDestroy");    }    @Override    protected void onRestart() {        super.onRestart();        System.out.println(" =======> onRestart");    }    @Override    public void onWindowFocusChanged(boolean hasFocus) {        super.onWindowFocusChanged(hasFocus);        System.out.println(" =======> onWindowFocusChanged");    }}
1 .  Activity的生命周期方法有7个。

(1)启动Activity时:

05-12 14:24:41.681 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onCreate
05-12 14:24:41.681 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStart
05-12 14:24:41.681 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onResume

(2)当前Activity跳转到另外一个Activity时:

05-12 14:26:18.080 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onPause
05-12 14:26:18.555 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStop

(3)在(2)的基础上回退到前一个Activity时:

05-12 14:27:16.542 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onRestart
05-12 14:27:16.542 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStart
05-12 14:27:16.542 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onResume

(4)按下Home键时:

05-12 14:33:11.176 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onPause
05-12 14:33:11.697 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStop

(5)在(4)的基础上重启应用时:

05-12 14:33:37.237 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onRestart
05-12 14:33:37.237 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStart
05-12 14:33:37.237 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onResume

可见(2)和(4)的操作执行结果是一样的;(3)和(5)的操作执行结果是一样的;

(6)按下锁屏键时:

05-12 14:36:10.198 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onPause
05-12 14:36:10.224 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStop

(7)自然息屏时:

05-12 14:37:10.329 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onPause
05-12 14:37:10.353 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStop

(8)在(6)或是(7)的基础上,按解锁屏键:

05-12 14:37:57.938 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onRestart
05-12 14:37:57.938 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStart

 用手触摸屏幕后在执行:

05-12 14:38:59.502 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onResume

(9)当用户按钮Back键或是执行  finish()方法时:

05-12 14:40:42.174 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onPause
05-12 14:40:42.726 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStop
05-12 14:40:42.726 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onDestroy


除了Activity的七个生命周期方法外,我们再来看三个方法

(1)onWindowFocusChanged();这个方法在Activity窗口获得或失去焦点时被调用。以下三种情况:

1.Activity 启动  ;

05-12 15:29:49.410 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onCreate
05-12 15:29:49.410 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStart
05-12 15:29:49.410 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onResume
05-12 15:29:49.556 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onWindowFocusChanged

2.从后一个Activity后退到前一个Activity  

跳转到另一个Activity

05-12 15:30:14.853 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onPause
05-12 15:30:14.888 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onWindowFocusChanged
05-12 15:30:15.334 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onSaveInstanceState
05-12 15:30:15.334 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStop

从后一个Activity后退到前一个Activity  

05-12 15:30:59.594 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onRestart
05-12 15:30:59.594 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStart
05-12 15:30:59.594 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onResume
05-12 15:30:59.619 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onWindowFocusChanged

3.前一步按下Home键现在重新启动应用时 

按下Home键:

05-12 15:31:38.951 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onPause
05-12 15:31:38.972 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onWindowFocusChanged
05-12 15:31:39.457 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onSaveInstanceState
05-12 15:31:39.457 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStop

按下Home键后重启应用:

05-12 15:32:06.645 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onRestart
05-12 15:32:06.645 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStart
05-12 15:32:06.645 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onResume
05-12 15:32:06.715 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onWindowFocusChanged

这个onWindowFocusChanged()都在onResume()和onPause()后执行;

但在自然息屏,或是按锁屏键时

05-12 15:32:36.792 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onPause
05-12 15:32:36.810 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onSaveInstanceState
05-12 15:32:36.810 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onStop
05-12 15:32:36.995 11793-11793/com.example.administrator.sharedpreferences I/System.out:  =======> onWindowFocusChanged

这个onWindowFocusChanged()是在onStop()方法后被只执行的,在是两种情况下,重启应用时这个放在onResume()前被调用两次,后被调用两次。

(2)onSaveInstanceState();这个方法从名字来看就是知道是用来保存状态的。以下两种情况:1.从后一个Activity后退到前一个ctivity  ;2.前一步按下Home键现在重新启动应用时,onSaveInstanceState()在onWindowFocusChanged()后执行;但在自然息屏,或是按锁屏键时是在onPause()后被调用的。( 看上面的日志 )  所以保存状态应该在这个onPause()后面。

(3)onRestoreInstanceState();


2 . Activity的屏幕方向

1.指定为竖屏:在AndroidManifest.xml中对指定的Activity设置android:screenOrientation="portrait",或者在onCreate方法中

指定:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  //竖屏

2.指定为横屏:在AndroidManifest.xml中对指定的Activity设置android:screenOrientation="landscape",或者在onCreate方法中

指定:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //横屏

为应用中的Activity设置特定的方向是经常用到的办法,可以为我们省去不少不必要的麻烦。

经过测试知道:当我们旋转屏幕时,我们发现系统会先将当前Activity销毁,然后重建一个新的。

系统先是调用onSaveInstanceState方法,我们保存了一个临时参数到Bundle对象里面,然后当Activity重建之后我们又成功的取出了这个参数。onSaveInstanceState()方法在onPuse()之前调用。在重新创建时onRestoreInstanceState()方法在onResume()方法前被执行。

为了避免这样销毁重建的过程,我们需要在AndroidMainfest.xml中对OrientationActivity对应的<activity>配置android:configChanges="orientation"。当在旋转屏模时只调用这个方法,没有了销毁重建的过程

@Overridepublic void onConfigurationChanged(Configuration newConfig) {//这个方法不是Activity的生命周期方法。    super.onConfigurationChanged(newConfig);    System.out.println(" =======> onConfigurationChanged");}

注意的一点:

1.如果<activity>配置了android:screenOrientation属性,则会使android:configChanges="orientation"失效。







0 0