[目录未定]android 如何在横竖屏切换时不销毁当前 activity
clq
浏览(666) -
2021-07-10 14:23:17 发表
编辑
关键字: android_dev_self_book
[2021-12-27 16:26:28 最后更新]
[目录未定]android 如何在横竖屏切换时不销毁当前 activity
话说安卓默认会销毁 ac 的做法实在是奇葩。如果不处理,在有视频的和定义子视图类的页面会很致命。所以安卓官方都建议在有视频的页面上不要重建。
//屏幕旋转时不销毁要加的事件响应
//1.加权限 android.permission.CHANGE_CONFIGURATIONS
//2.写明旋转时 ac 要响应的事件 android:configChanges="orientation|keyboardHidden|navigation|screenSize"
//3.重载此事件
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
switch (newConfig.orientation)
{
//更改为LANDSCAPE
case (Configuration.ORIENTATION_LANDSCAPE):
//如果转换为横向屏时,有要做的事,请写在这里
break;
//更改为PORTRAIT
case (Configuration.ORIENTATION_PORTRAIT):
//如果转换为竖向屏时,有要做的事,请写在这里
break;
}//switch
}//
clq
2021-12-27 16:17:45 发表
编辑
这样处理后其实在返回键返回桌面后仍然会销毁。可以重载返回键相关的两个事件。不过仍然有可能还有其他特殊事件会销毁 activity
似乎彻底的做法是重载 onDestroy
不知这样做是否有隐患。
------------------------------------------------
// 捕获返回键的方法2 //2021.12.27
@Override
public void onBackPressed() {
//Log.d(TAG, "onBackPressed()");
super.onBackPressed(); //注释掉的话就会让窗口不会退出
ShowMessage_ok("onBackPressed()", this);
//---- 手动返回桌面,但这样不会导致本页面销毁
// Intent home = new Intent(Intent.ACTION_MAIN);
// home.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// home.addCategory(Intent.CATEGORY_HOME);
// startActivity(home);
}//
//参考 https://blog.csdn.net/zhaobinbin2015/article/details/80953614
//点击back键的销毁过程
//点击,back键后,Activity走的流程是:onPause(),onStop(),最后是onDestory()。
@Override
protected void onDestroy() {
//Log.d(TAG, "onDestroy()");
super.onDestroy(); //注释掉的话就会让窗口仍然会退出,但是不会需要再重建了,所以我们的框架就不会再白屏了
//不过感觉这个方法不太安全
ShowMessage_ok("onDestroy()", this);
//---- 手动返回桌面,但这样不会导致本页面销毁
// Intent home = new Intent(Intent.ACTION_MAIN);
// home.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// home.addCategory(Intent.CATEGORY_HOME);
// startActivity(home);
}//
//------------------------------------------------
// 取消返回键返回事件:
// activity下添加如下代码即可:
// @Override
// public boolean onKeyDown(int keyCode, KeyEvent event) {
// if (keyCode == KeyEvent.KEYCODE_BACK
// && event.getAction() == KeyEvent.ACTION_DOWN) {
// return true;
// }
// return super.onKeyDown(keyCode, event);
// }//
clq
2021-12-27 16:22:04 发表
编辑
当应用程序强制停止时,它不会触发。 当应用程序强制停止时,将调用Process.killProcess(),但不会调用onDestroy()函数
clq
2021-12-27 16:26:28 发表
编辑
当您强行停止应用程序时,确实会发生-这是强制停止。没有警告,没有回调,只是停止了。整个过程将被终止,并且不会向任何正在运行的组件(活动,服务等)发出任何警告。
绝对不能保证将调用onDestroy()。将所有应用程序关键代码移到onPause()中,在大多数情况下会调用该代码。
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.