0

我正在使用异步任务将图片上传到远程服务器。为了向用户显示进度,我正在使用进度对话框。此进度对话框是在异步任务类的 preExecute 方法中创建的。

当用户旋转屏幕时,进度对话框消失,但异步任务仍在运行。该活动持有对异步任务的静态引用,因此我知道该任务仍在运行。我现在如何再次显示进度对话框?我尝试了以下方法:

活动的创建方法:

protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);

if(task != null) {
Status status = task.getStatus();

if(status == Status.RUNNING) {
    task.updateViewContext(this);
}

}

我的异步任务类的构造函数:

public UploadTask(UploadPicturesActivity activity) {
   this.context = activity;
   dialog = new ProgressDialog(activity);
   dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);        
}   

我的 asnyc 任务类的 preexcetue 方法:

protected void onPreExecute() {
     this.dialog.show();
}

并尝试再次显示对话框(不起作用):

public void updateViewContext(UploadPicturesActivity activity) {
    this.context = activity;
    dialog.show();
}

问候

迈克尔

4

2 回答 2

2

为什么不向文件android:configChanges="orientation"中的活动声明添加属性AndroidManifest.xml

android:configChanges属性的目的是防止在真正需要时重新创建活动。

更改时不会关闭对话框screen orientation

Beginning with Android 3.2 (API level 13), the "screen size" also changes when the device 
switches between portrait and landscape orientation. Thus, if you want to prevent runtime 
restarts due to orientation change when developing for API level 13 or higher (as declared by the 
minSdkVersion and targetSdkVersion attributes), you must include the "screenSize" value in 
addition to the "orientation" value.That is, you must declare android:configChanges="orientation|screenSize"
于 2013-02-24T18:27:46.097 回答
1

这是因为 Android 会破坏您的活动并在轮换时重新启动它。这意味着所有视图、对话框等都被销毁。但是一个正在运行的线程不能。最好的解决方案是android:configChanges="orientation|screenSize"在清单中添加您的活动,这将为您的活动关闭此行为。但是,只要您没有横向和纵向的不同布局,它仍然会正确重绘您的活动。

于 2013-02-24T18:28:10.087 回答