關於屏幕方向:
閱讀此頁上的答案後,我意識到,在運行的AsyncTask我的應用程序無法處理方向的變化。
這是我解決這個問題:
@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可以很好地表明她需要等待多長時間。
IntentService可能嗎? – gunar
有幾個很少超過一個數量級。您所描述的內容似乎相當長,這意味着您將有用戶退出該活動並期望在後臺完成治療。一個asynctask在這裏似乎不太合適。我+1槍和推薦和IntentService – njzk2
什麼「幾個很少超過一個數量級」意味着隊友?這將在後臺默默地完成,用戶不會離開應用程序.. @ njzk2 – tony9099