我的AsyncTask
在onCreate()
中被称为Main Activity
。在相同的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);
}
}
答案 0 :(得分:3)
您应该检查Handling Run Time Changes
您可以使用
处理在配置更改期间保留对象
允许您的活动在配置更改时重新启动,但会将有状态的对象带到您的活动的新实例。
自行处理配置更改
防止系统在某些配置更改期间重新启动您的活动,但在配置更改时收到回调,以便您可以根据需要手动更新活动。
在运行时配置更改期间保留对象:
重写 onRetainNonConfigurationInstance()方法以返回您想要保留的对象。
再次创建活动时,请调用 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();
}
...
}
或者只是在您的Manifest of Activity中添加此代码
android:screenOrientation="portrait"
或
android:screenOrientation="landscape"
答案 1 :(得分:1)
您可以在活动清单中添加android:configChanges="orientation"
并手动设置contentView或通过覆盖活动中的onConfigurationChanged方法来更改布局。