android - 当设备方向改变时 onCreate 方法不断被调用

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

我有一个 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);
    }
}

最佳答案

您应该检查Handling Run Time Changes

您可以使用

来处理

在配置更改期间保留对象

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

自行处理配置更改

防止系统在某些配置更改期间重新启动您的 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();
    }
    ...
}

或者只需将此代码添加到您的 Activity list 中

 android:screenOrientation="portrait" 

 android:screenOrientation="landscape" 

关于android - 当设备方向改变时 onCreate 方法不断被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8839736/

相关文章:

android - 使用单个 AsyncTask 上传所有列表项

android - 相机 API 中是否有等效于相机 2 API 方法 camera.autoFocus() 的方法?

按下后退按钮时Android跳过 Activity

android - 如何在没有 Intent 的情况下更改 android 中整个系统的语言设置?

android - 使用 Otto 将数据从 Activity 传递到 Fragment

Android:将参数从Activity传递给Service

android - 从 MediaFiles 异步加载 CustomListView 中的图像

android - 我可以在 android 中完全重新启动服务吗?

java - 无法使用android studio向MySQL数据库插入数据

android - 创建来自屏幕顶部的 Toast