登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [目录未定]android 如何在横竖屏切换时不销毁当前 activity     [回主站]     [分站链接]
[目录未定]android 如何在横竖屏切换时不销毁当前 activity
clq
浏览(400) - 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()中,在大多数情况下会调用该代码。


总数:3 页次:1/1 首页 尾页  
总数:3 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1