精华内容
下载资源
问答
  • Android开发文档上专门有一小节解释这个问题。简单来说,Activity是负责与用户交互的最主要机制,接下来为您详细介绍
  • 旋转屏幕Activity执行的生命周期方法

    千次阅读 2016-12-17 19:26:11
    很多时候会用到屏幕旋转时需要对一些数据进行保存,例如当横竖屏区切换时要保存先前屏幕的一些数据和状态,那么在旋转屏幕的时候都会调用activity生命周期的哪些方法呢,今天写了个程序运行得出了如下结果: ...

    个人学习笔记:

    很多时候会用到屏幕旋转时需要对一些数据进行保存,例如当横竖屏区切换时要保存先前屏幕的一些数据和状态,那么在旋转屏幕的时候都会调用activity生命周期的哪些方法呢,今天写了个程序运行得出了如下结果:

    (1)如果销毁当前的Activity,那么就要重写Activity的两个方法

    onSaveInstanceState()保存数据和 onRestoreInstanceState()还原数据
    执行顺序:
    onCreate
    onStart
    onResume


    onPause
    onSaveInstanceState
    onStop
    onDestroy
    onCreate
    onStart
    onRestoreInstanceState
    onResume


    在灭屏时调用的方法
    onPause
    onSaveInstanceState
    onStop


    屏幕重新唤醒时调用的方法:
    onRestart
    onStart
    onResume


    退出程序时调用的方法:
    onPause
    onStop
    onDestroy


    (2)在manifest.xml文件中设置android:configChanges="orientation|keyboardHidden|screenSize"
    切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
    需注意的是,在4.0以后的版本需要加上ScreenSize 不然不会执行onConfigurationChanged方法
    执行顺序:
    onCreate
    onStart
    onResume


    onConfigurationChanged
    展开全文
  • Android屏幕旋转Activity的生命周期

    热门讨论 2012-06-06 17:20:19
    Android屏幕旋转Activity的生命周期
  • 默认情况下,当用户手机的重力感应器打开后,旋转屏幕方向,会导致当前activity发生onDestroy-> onCreate,这样会重新构造当前activity和界面布局,如果在Camera界面,则表现为卡顿或者黑屏一段时间。如果是在横竖屏...
  • 屏幕旋转180度 activity旋转180度 具体看代码
  • Activity旋转屏幕时的生命周期

    千次阅读 2018-09-26 16:01:26
    模拟器版本为 android5.0 (以下数据测试) 主要根据在AndroidManifest中配置configChanges参数决定 ...启动 activity生命周期如下: 09-26 01:53:04.127 5376-5376/? D/TestApplication: onCrea...

    模拟器版本为 android5.0 (以下数据测试)

    主要根据在AndroidManifest中配置configChanges参数决定

    1. 不进行任何配置和配置android:configChanges="orientation"参数:

    • 启动 activity生命周期如下:
    09-26 01:53:04.127 5376-5376/? D/TestApplication: onCreate...
    09-26 01:53:04.135 5376-5376/? D/TestApplication: onStart...
        onResume...
    
    • 竖屏旋转横屏
    09-26 01:57:06.180 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onPause...
    09-26 01:57:06.181 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onStop...
        onDestroy...
    09-26 01:57:06.222 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onCreate...
    09-26 01:57:06.224 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onStart...
        onResume...
    
    • 横屏旋转为竖屏(和上面的一致)
    09-26 01:57:33.069 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onPause...
    09-26 01:57:33.070 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onStop...
        onDestroy...
    09-26 01:57:33.103 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onCreate...
    09-26 01:57:33.104 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onStart...
    09-26 01:57:33.105 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onResume...
    
    

    2. 配置 android:configChanges="orientation|screenSize>参数,监控屏幕旋转

    screenSize:设备的屏幕的尺寸信息发生了改变,旋转屏幕时也会触发这个,但是这个值是API13之后才有的,因此13之前的设备没有这个。

    • 只会调用onConfigurationChanged方法,不会调用activity生命周期方法
    09-26 02:21:42.594 15709-15709/test.juyoufuli.com.testapplication D/TestApplication: onConfigurationChanged...
    09-26 02:22:51.193 15709-15709/test.juyoufuli.com.testapplication D/TestApplication: onConfigurationChanged...
    

    总结

    1. Activity 的生命周期变化也会影响到和它绑定的Fragment。
      所以要注意在发生旋转后的数据保存处理。
    展开全文
  • activity在竖屏的时候,顶部会有状态栏,顶部会有ToolBar,现在需求是,旋转屏幕以后,横屏状态下 整个界面是以全屏状态显示,隐藏ToolBar,不显示屏幕最顶部的状态栏首先,在AndroidManiFest里面设置Activity的属性...

    activity在竖屏的时候,顶部会有状态栏,顶部会有ToolBar,现在需求是,旋转屏幕以后,横屏状态下 整个界面是以全屏状态显示,隐藏ToolBar,不显示屏幕最顶部的状态栏

    首先,在AndroidManiFest里面设置Activity的属性:

               
    <activity
        android:name=".MainActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:screenOrientation="sensor"
        />
    
    

    然后,在Activity中重写onConfigurationChanged方法,代码如下:

    private boolean portrait;
    
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        portrait = newConfig.orientation == Configuration.ORIENTATION_PORTRAIT;
        tryFullScreen(!portrait);
    }
    
    private void tryFullScreen(boolean fullScreen) {
        if (activity instanceof AppCompatActivity) {
            ActionBar supportActionBar = ((AppCompatActivity) activity).getSupportActionBar();
            if (supportActionBar != null) {
                if (fullScreen) {
                    supportActionBar.hide();
                } else {
                    supportActionBar.show();
                }
            }
        }
        setFullScreen(fullScreen);
    }
    
    
    private void setFullScreen(boolean fullScreen) {
            WindowManager.LayoutParams attrs = getWindow().getAttributes();
            if (fullScreen) {
                attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
                getWindow().setAttributes(attrs);
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
            } else {
                attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
                getWindow().setAttributes(attrs);
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
            }
    
    }
    这样就能实现自动旋转屏幕,并且全屏的需求了
    展开全文
  • 运行时变更就是设备在运行时发生变化(例如屏幕旋转、键盘可用性及语言)。发生这些变化,Android会重启Activity,这时就需要保存activity的状态及与activity相关的任务,以便恢复activity的状态。 为此,google提供...
  • 当设备旋转时,系统会默认销毁当前activity实例,然后再...设备一经旋转,Android需要销毁当前activity,然后新建一个activity来完成oncreate()方法的调用,从而实现使用最佳资源匹配新的设备配置。 要解决这个问题

    当设备旋转时,系统会默认销毁当前activity实例,然后再创建一个新的activity实例,重新调用activity的各个生命周期。Android可完成最佳匹配资源的调用,但前提是它必须通过新建一个activity来实现。设备一经旋转,Android需要销毁当前activity,然后新建一个activity来完成oncreate()方法的调用,从而实现使用最佳资源匹配新的设备配置。

    要解决这个问题有三个方法:

    1、在AndroidManifest.xml中设置
    设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
    旋转时,activity对象不会被销毁。然后在activity中重写onConfigurationChanged()方法,每次旋转时会调用该方法,可以再该方法中处理数据。Activity的onConfigurationChanged()方法被触发,在这里开发者可以获取到当前的屏幕方向以便做必要的更新。既然这种情况下的Activity不会被销毁,旋转后Activity里正显示的信息(例如文本框中的文字)也就不会丢失了。
    如果应用横竖屏布局文件是同一个,那么在onConfigurationChanged()方法中不需要我们进行处理。如果布局文件不是同一个,那么我们可以在onConfigurationChanged()方法中判断屏幕方向,通过setContentView()方法来加载不同布局。

    2、旋转后恢复现场
    即在onPause()里将用户当前已经输入的内容保存到数据库或Preference,在onCreate()方法里读取并填充到表单中,这也是官方推荐的方法。需要补充一点,如果Activity重建需要耗费大量资源或需要访问网络导致时间很长,可以实现onRetainNonConfigurationInstance()方法将所需数据先保存到一个对象里

     @Override
            public Object onRetainNonConfigurationInstance() {
                   final MyDataObject data = collectMyLoadedData();
                   return data;
            }

    重建时在在onCreate()方法里通过getLastNonConfigurationInstance()方法获得之前保存的数据。

          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
    
              final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
              if (data == null) {//表示不是由于Configuration改变触发的onCreate()
                  data = loadMyData();
              }
           ...
          }

    3、设备旋转前保存数据
    在设备运行中发生配置变更时,需要以某种方式保存以前的数据。覆盖activity当中onSaveInstanceState(Bundle outState)方法,该方法通常在onpause()、onstop()以及destory()方法之前由系统调用。
    方法onSaveInstanceState(Bundle outState)中要求所有的activity视图将自身状态保存到bundle方法中。

    public class TestActivity extends Activity {
    
        private int index = 0;
        private int saveIndex;
        private final String KEY_INDEX = "index";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_test);
            if (savedInstanceState != null) {
                saveIndex = savedInstanceState.getInt(KEY_INDEX);
            }
        }
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putInt(KEY_INDEX, index);
        }
    }
    展开全文
  • 最近遇到问题 ,测试人员说应用会有偶现卡住的...activity 重启了 ,应该可以肯定是屏幕旋转导致 查看代码该加的都加了: 在进LOG看看: 果然是由于 mcc 和 mnc 更新了。 果断看看其他大神文章: https://...
  • 最近学习了Android开发的相关课程,也试着动手做了书上的例子和自己的... 教材中提到的解决方法是分别创建水平和垂直布局,再通过覆盖onSaveInstanceState(Bundle)方法保存数据,在屏幕旋转后将数据传递给新的Activ...
  • 对于一般的Activity,如果不做特殊要求,那么在手机切换横竖屏后,Activity会重新运行onCreate()等流程,不过之前start的Activity仍然有效。若想让Activity不再走onCreate等流程,那么就在AndroidManifest.xml文件...
  • 目录Activity简介Activity的生命周期验证生命周期的执行总结 Activity简介 Activity中文意思“活动”,是Android中四大组件之一,主要作用于用户交互、页面展示。可以理解为用户打开Android手机上的任意一个应用的...
  • 主要针对屏幕旋转Activity 生命周期有何影响。 第一种情况 在没有其它配置的情况下,通过日志打印屏幕旋转会调用的方法。 //onPause()----onStop()-----onDestroy()-----onCreate() ---- onStart()---onResume()...
  • 屏幕旋转导致Activity销毁重建的生命周期先来看两张图片第一张是竖屏时的TextView 第二张是横屏时的TextView 从以上两张图片可以看出,当屏幕旋转后,Activity被销毁后重新创建,TextView中的内容被还原,这...
  • Android旋转屏幕不销毁Activity

    千次阅读 2016-05-04 14:44:58
    要在AndroidManifest.xml配置Activity android:configChanges="keyboardHidden|orientation|screen...可以在Activity 中监听屏幕旋转 @Override public void onConfigurationChanged(Configuration newConfig) {
  • 简单来说,Activity是负责与用户交互的最主要机制,任何“设置”(Configuration)的改变都可能对Activity的界面造成影响,这时系统会销毁并重建Activity以便反映新的Configuration。 “屏幕方向”(orientation...
  • 简单来说,Activity是负责与用户交互的最主要机制,任何“设置”(Configuration)的改变都可能对Activity的界面造成影响,这时系统会销毁并重建Activity以便反映新的Configuration。“屏幕方向”(orientation)是...
  • 0.只需在activity类下重写onSaveInstanceState方法,下面是一个重写的实例,目的是保存oncreate()方法中的临时变量 @Override protected void onSaveInstanceState(Bundle outState) { super....
  • Android屏幕旋转适配

    2016-04-24 15:13:28
    代码解析 http://blog.csdn.net/leejizhou/article/details/51233342
  • 一、在manifest配置文件中找到要设置的activity,配置android:configChanges="keyboardHidden|orientation|screenSize",如下所示: <activity android:name=".fragment.todo.leave.submitProcess....
  • Android Activity屏幕旋转方向完全控制

    千次阅读 2016-11-17 17:06:10
    我们知道,系统提供了android:configChanges="orientation" 清单文件属性以监听屏幕旋转,进而触发onConfigurationChanged方法。 但这有时不能完全满足我们的需求。比如典型的应用场景:视频播放器的屏幕方向锁功能...
  • Activity屏幕当中显示的方向。属性值可以是下表中列出的一个值: "unspecified" 默认值,由系统来选择方向。它的使用策略,以及由于选择时特定的上下文环境,可能会因为设备的差异而不同。 "...
  • Android旋转屏幕时阻止activity重建

    千次阅读 2016-03-14 09:14:17
    Android在旋转屏幕activity会被重建,重新调用activity的各个生命周期,如果不想重建,那么需做如下设置:android:configChanges="orientation|screenSize"orientation选项指在屏幕方向发生改变,screenSize选项指...
  • 1.在应用中固定屏幕方向。  在AndroidManifest.xml的activity中加入:  android:screenOrientation=”landscape”  属性即可(landscape是横向,portrait是纵向)...2.随屏幕旋转时,不重新调用onCreat
  • android屏幕旋转时默认会重新加载页面,用户体验较差。 如果要禁止重新加载可以用如下方法: AndroidManifest.xml中对应的activity下增加一项 android:configChanges="orientation|screenSize" &...
  • 当我旋转屏幕时, onCreate方法重启程序,重新创建所有的元素。所以在manifest文件中设置 android:configChanges="orientation" 再次旋转屏幕时,onCreate方法不被调用了,但是新布局显示的也不正确。 在...
  • 默认情况下,Android设备屏幕方向改变时,会重启正在运行的Activity,会依次走onDestroy()、onCreate(). 如果此时界面运行的是播放音频或者是播放视频,那么旋转后音频或视频状态都会被销毁并重置。 还好Android...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,396
精华内容 10,558
关键字:

旋转屏幕activity方法