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"失效。
- Activity的生命周期方法
- Activity的生命周期方法
- Activity的生命周期方法
- Activity的生命周期方法
- Activity的生命周期方法
- Activity的生命周期及方法
- View的生命周期方法和Activity生命周期方法关系
- View的生命周期方法和Activity生命周期方法关系
- AsyncTask和Activity的生命周期方法
- Activity类的7个生命周期方法
- Activity生命周期、各个方法的调用
- Activity生命周期中各个方法的调用
- Activity的生命周期onSaveInstanceState onRestoreInstanceState 两个方法
- Activity的生命周期函数&finish方法
- Android-Activity生命周期 基本方法的作用
- Android基础Activity的生命周期方法
- 旋转屏幕Activity执行的生命周期方法
- Activity与Fragment之间的生命周期方法
- java分页
- java中的IO流系统详解
- Apache编译make问题[mod_deflate.la] 错误 1
- 12个非常有用的JavaScript技巧
- Babel 简单介绍
- Activity的生命周期方法
- Docker学习之守护进程
- Windows中实现不依赖账户登录的开机启动程序
- 【Android 进阶】Iconfont 图标的使用以及自定义
- Spring MVC 使用随笔
- MySQL索引原理及慢查询优化
- Mysql登录时报 ERROR 1045 (28000)解决
- Zookeeper系列(二十四)Zookeeper原理解析之处理流程
- CSU 1809 Parenthesis(RMQ||线段树)