当我从纵向转动设备时,如何禁用onCreate事件?因为当应用程序启动时,它将从Internet获取大量数据,每次用户转动设备时下载这些数据都是不好的。
答案 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中。应该在onRestoreInstanceState
或onCreate
中恢复状态。在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来备份和恢复轮换后活动的数据。