android 禁止横竖屏切换时调用onCreate函数

来源:互联网 发布:条码软件 编辑:程序博客网 时间:2024/05/21 20:30

在横竖屏切换的时候会重新调用onCreate方法,可以使用以下方法禁止切换的过程中调用onCreate方法,如果你需要横屏和竖屏使用不同的布局文件,可能这种方式是不行的,经过我自己写代码测试,如果当前是竖屏,经过切换后它并不会使用横屏的布局文件,而是将竖屏的布局文件使用在横屏状态下,不知道是我写的不合适还是本来就这样,希望和大家讨论这个问题。通过查阅Android API可以得知android:onConfigurationChanged实际对应的是Activity里的onConfigurationChanged()方法。在AndroidManifest.xml中添加上诉代码的含义是表示在改变屏幕方向、弹出软件盘和隐藏软键盘时,不再去执行onCreate()方法,而是直接执行onConfigurationChanged()。如果不申明此段代码,按照Activity的生命周期,都会去执行一次onCreate()方法,而onCreate()方法通常会在显示之前做一些初始化工作。所以如果改变屏幕方向这样的操作都去执行onCreate()方法,就有可能造成重复的初始化,降低程序效率是必然的了,而且更有可能因为重复的初始化而导致数据的丢失。这是需要千万避免的。                                                                                                         

禁止调用onCreate方法:在Mainifest.xml的Activity元素中加入android:configChanges="orientation|keyboardHidden"属性或者代码中添加这个函数

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}

                                            

我写的测试程序:                                                                                                                                                                                                

package lzu.LandAndPortraintTest;import android.app.Activity;import android.content.pm.ActivityInfo;import android.content.res.Configuration;import android.os.Bundle;public class LandAndPortraintTest extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        printSentence();    }    public void printSentence(){    System.out.println("printSentence");    }    public void printPortraintSentence(){    System.out.println("printSentence Portraint");    }    public void printLandscapeSentence(){    System.out.println("printSentence Landscape");    }    public void onConfigurationChanged(Configuration newConfig)    {     super.onConfigurationChanged(newConfig);     if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)    {    printLandscapeSentence();    }    else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)    {    printPortraintSentence();    }    }}
layout-land下main.xml文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><TextView      android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="@string/hello"    /></LinearLayout>
layout-port下main.xml文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><TextView      android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="@string/app_name"    /></LinearLayout>
values下strings.xml文件:
<?xml version="1.0" encoding="utf-8"?><resources>    <string name="hello">Hello World, LandAndPortraintTest!</string>    <string name="app_name">LandAndPortraintTest</string></resources>

结果:


 

原创粉丝点击