【问题标题】:onCreate method keeps getting called when the orientation of device changes当设备的方向发生变化时,onCreate 方法会不断被调用
【发布时间】:2012-01-12 17:48:06
【问题描述】:

我有一个AsyncTask,在我的Main Activity 中称为onCreate()。在同一个Activity 中,如果方向改变,AsyncTask 会再次被调用。如何防止这种情况发生或如何重组我的程序以避免发生这种情况?

public class Main extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pages);
        StartProcess sProcess = new StartProcess();
        sProcess.execute(this);
    }
}

【问题讨论】:

  • 禁止你的应用程序改变方向能解决你的问题吗?

标签: android android-activity android-asynctask screen-orientation oncreate


【解决方案1】:

你应该检查Handling Run Time Changes

您可以使用

在配置更改期间保留对象

允许您的活动在配置更改时重新启动,但将有状态的对象携带到您的活动的新实例。

自行处理配置更改

防止系统在某些配置更改期间重新启动您的 Activity,但在配置发生更改时接收回调,以便您可以根据需要手动更新您的 Activity。

在运行时配置更改期间保留对象:

重写 onRetainNonConfigurationInstance() 方法 以返回您想要保留的对象。

当您的 Activity 再次创建时,调用 getLastNonConfigurationInstance() 来恢复您的对象。

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

保留在 OnCreate 中;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
    if (data == null) {
        data = loadMyData();
    }
    ...
}

或者只是在你的活动清单中添加这段代码

 android:screenOrientation="portrait" 

 android:screenOrientation="landscape" 

【讨论】:

    【解决方案2】:

    您可以在 Activity 清单中添加 android:configChanges="orientation" 并手动设置 contentView 或通过覆盖 Activity 中的 onConfigurationChanged 方法来更改布局。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多