如何在更改方向时禁用onCreate操作?

时间:2011-11-01 06:24:56

标签: java android

当我从纵向转动设备时,如何禁用onCreate事件?因为当应用程序启动时,它将从Internet获取大量数据,每次用户转动设备时下载这些数据都是不好的。

6 个答案:

答案 0 :(得分:24)

在清单写入的活动标签中

  

机器人:configChanges = “取向|屏幕尺寸”

示例:

<activity android:name=".MainActivity"
            android:configChanges="orientation|screenSize">

答案 1 :(得分:3)

在onCreate中使用标记检查。在初始化/声明时使flag = true 在你的清单文件中添加android:configChanges =“orientation”

在你的java文件中覆盖 onConfigurationChanged 方法并将标志设为false。

执行此操作后,将调用onCreate,但中的代码如果将不会被调用。 将您的代码移到 if 条件中。

尝试使用它。

static boolean flag = true;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    if(flag)
        Log.d("ONCREATE", "flag is true");
}    
@Override
public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    Log.d("ONCONFIGCHANGE", "CALLED" );
    flag = false;
    super.onConfigurationChanged(newConfig);
}

答案 2 :(得分:3)

替代方法是使用onSaveInstanceState方法将任何非持久性数据保存到Bundle中。应该在onRestoreInstanceStateonCreate中恢复状态。在onCreate中,您必须分析savedInstanceState参数,如果它不为null,则应恢复以前保存的状态。

答案 3 :(得分:2)

这个解决方案是迄今为止最好的解决方案。 在您的清单文件中添加

<activity
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:name="your activity name"
        android:label="@string/app_name" 
        android:screenOrientation="landscape">
      </activity

在您的活动类中添加以下代码

@Override
public void onConfigurationChanged(Configuration newConfig) 
{
    super.onConfigurationChanged(newConfig);
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        //do your stuff here
        //
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
  //do your stuff here

    }
}

答案 4 :(得分:1)

在manifest.xml中为活动添加android:configChanges =“orientation”。

答案 5 :(得分:-1)

对于C#Xamarin我有这个解决方案:

using System.Collections.Concurrent;


public static class ObjectExchanger
{
    private static ConcurrentDictionary<string, object> ObjectList = new ConcurrentDictionary<string, object>();

    /// <summary>
    /// Add key and object. Do not add the same key twice.
    /// </summary>
    /// <param name="key"></param>
    /// <param name="obj"></param>
    public static void Add(string key, object obj)
    {
        ObjectList.GetOrAdd(key, obj);
    }

    /// <summary>
    /// Get object via key. Do net Get twice. Key/object will remove after get it once.
    /// </summary>
    /// <param name="key"></param>
    public static object Get(string key)
    {
        object obj = null;

        ObjectList.TryRemove(key, out obj);

        return obj;
    }
}

您可以在OnCreate方法中使用in来备份和恢复轮换后活动的数据。