android整合--屏幕旋转触发事件
16lz
2021-01-23
已经知道怎样设置屏幕显示方向,下面看一下屏幕旋转时触发事件。
先看main.xml
<?xml version="1.0" encoding="utf-8"?>
OrentationsActivity.java。
public class OrientationsActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.d("StateInfo", "onCreate"); } @Override public void onStart() { Log.d("StateInfo", "onStart"); super.onStart(); } @Override public void onResume() { Log.d("StateInfo", "onResume"); super.onResume(); } @Override public void onPause() { Log.d("StateInfo", "onPause"); super.onPause(); } @Override public void onStop() { Log.d("StateInfo", "onStop"); super.onStop(); } @Override public void onDestroy() { Log.d("StateInfo", "onDestroy"); super.onDestroy(); } @Override public void onRestart() { Log.d("StateInfo", "onRestart"); super.onRestart(); } }
在两个EditText中输入一些字符。就像这样。
6. 按Ctrl+F11,改变屏幕的方向。下图展示了横屏下的模拟器。注意,第一个EditText的内容仍然是存在的,但第二个EditText已经被清空了。(文章结尾会解释这是为什么)
7、观察LogCat窗口。
[html] view plain copy- 12-15 12:27:20.747: D/StateInfo(557):onCreate
- 12-15 12:27:20.747: D/StateInfo(557):onStart
- 12-15 12:27:20.747: D/StateInfo(557):onResume
- ...
- 12-15 12:39:37.846: D/StateInfo(557):onPause
- 12-15 12:39:37.846: D/StateInfo(557):onStop
- 12-15 12:39:37.866: D/StateInfo(557):onDestroy
- 12-15 12:39:38.206: D/StateInfo(557):onCreate
- 12-15 12:39:38.216: D/StateInfo(557):onStart
- 12-15 12:39:38.257: D/StateInfo(557):onResume
[html] view plain copy
- 12-15 12:39:37.846: D/StateInfo(557):onPause
- 12-15 12:39:37.846: D/StateInfo(557):onStop
- 12-15 12:39:37.866: D/StateInfo(557):onDestroy
- 12-15 12:39:38.206: D/StateInfo(557):onCreate
- 12-15 12:39:38.216: D/StateInfo(557):onStart
- 12-15 12:39:38.257: D/StateInfo(557):onResume
在上面例子可以看出,有id的edittext保存了数据,而没有id的edittext没有保存数据,这是系统自己执行的保存动作,那么怎样手动保存呢,下面开始说。
当activity被销毁的时候,会调用onpause方法或onSaveinstancestate方法,但是当activity葱调用栈中被清除的时候onsaveinstancestate方法不被调用,所以我们要尽量把保存数据写在onpause方法中
简而言之,想要保存activity的状态,那么总是要实现onPause()方法,然后使用你自己的方法去保存状态信息,例如使用数据库,外部或内部的存储。 如果你想简单地保存状态信息,当activity在重新创建的时候,从新加载这些信息。一个简单的方法就是实现onSaveInstanceState()这个方法,因为它提供了一个Bundle对象作为参数,这样,就可以使用这个Bundle对象去保存activity的信息。下面的代码将展示如何使用onSaveInstanceState()方法:
@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stuboutState.putString("id", "12324");super.onSaveInstanceState(outState);}
当activity被重建的时候oncreate方法首先被调用,然后onrestoreinstancestate方法被调用,恢复保存数据 @Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {// TODO Auto-generated method stub StringID = savedInstanceState.getString("id");}
但是 onRestoreInstanceState这个方法也有局限性,它只能通过Bundle存放数据,如果想要存放更多的数据,更复杂的数据,这样就不太合适了,再介绍一种方法
当一个activity配置被修改的时候,这个方法会自动被调用,返回object类型,意味着你可以存放任何类型数据
把你想保存的东西,通过这个方法返回出来。 可以观察到,这个方法返回一个Object对象,这就允许你返回任何数据类型。如果要提取保存的数据,可以在onCreate()方法中进行提取,使用getLastNonConfigurationInstance()回调方法:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String message = (String)getLastNonConfigurationInstance(); }
onRetainNonConfigurationInstance()和getLastNonConfigurationInstance(),这两个方法可以允许你随时地保存信息。
例如,当用户下载数据的同时改变了屏幕方法,使用这两个方法去保存数据,总好过重新下载数据吧。
更多相关文章
- Android应用程序全屏显示的方法
- Android 实现模拟按键方法
- android定时获取数据更新
- Android 实现由下至上弹出并位于屏幕底部的提示框
- Android屏幕横屏竖屏切换的方法
- Android WIFI热点默认SSID的修改方法
- android 屏幕保持唤醒 不锁屏 android.permission.WAKE_LOCK
- Android 屏幕真实分辨率获取
- android activity之间传递bean类型数据