在android中的asynctask期间处理方向更改

时间:2013-08-28 09:29:59

标签: android-asynctask android-orientation

我目前在asyntask中遇到了问题。当进度条启动并且一旦我旋转屏幕,进度条消失并且活动重新开始。我正在尝试使用

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

但是如果我的AsyncTask不在我的活动中怎么办...它在许多活动类共有的另一个类文件中。然后我怎样才能得到setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);感谢任何有帮助的人。

2 个答案:

答案 0 :(得分:0)

这适用于我的应用。我把这一行放在清单中。

**android:configChanges="orientation|screenSize"**

答案 1 :(得分:0)

以下是我对此问题的解决方案:

@Override
protected void onPreExecute() {
    Device.lockOrientation((Activity)context);
    ...
}

@Override
protected void onPostExecute(List<Hydrant> hydrants) {
    Device.releaseOrientation((Activity)context);
    ...
}

设备实施:

public class Device {

    public static void lockOrientation(Activity activity) {
        Display display = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        int rotation = display.getRotation();
        int tempOrientation = activity.getResources().getConfiguration().orientation;
        int orientation = 0;
        switch(tempOrientation)
        {
        case Configuration.ORIENTATION_LANDSCAPE:
            if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90)
                orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            else
                orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
            break;
        case Configuration.ORIENTATION_PORTRAIT:
            if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270)
                orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            else
                orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
        }
        activity.setRequestedOrientation(orientation);
    }

    public static void releaseOrientation(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
    }

}

由于AsyncTasks只能运行几秒钟,这对我来说是一个可以接受的解决方案,因为这很少会影响用户。特别是像ProgressDialog这样的东西可以很好地表明她需要等多久。