当进程对话框和后台线程活动时,如何处理屏幕方向的变化?

当进程对话框和后台线程活动时,如何处理屏幕方向的变化?

我的程序在后台线程中做一些网络活动。在开始之前,它会弹出一个进度对话框。对话框在处理程序上被取消。这一切都很好,除非当对话框打开时屏幕方向发生变化(后台线程正在进行)。此时,应用程序要么崩溃,要么陷入死锁,或者进入一个奇怪的阶段,在所有线程被杀死之前,应用程序根本无法工作。

怎样才能优雅地处理屏幕方向的变化?

下面的示例代码大致符合我的实际程序所做的工作:

public class MyAct extends Activity implements Runnable {
    public ProgressDialog mProgress;

    // UI has a button that when pressed calls send

    public void send() {
         mProgress = ProgressDialog.show(this, "Please wait", 
                      "Please wait", 
                      true, true);
        Thread thread = new Thread(this);
        thread.start();
    }

    public void run() {
        Thread.sleep(10000);
        Message msg = new Message();
        mHandler.sendMessage(msg);
    }

    private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            mProgress.dismiss();
        }
    };}


我试图在onSaveInstanceState中忽略进度对话框,但这只会防止立即崩溃。后台线程仍在运行,UI处于部分绘制状态。需要杀死整个应用程序才能重新开始工作。


小怪兽爱吃肉
浏览 455回答 3
3回答

当年话下

当您切换方向时,Android将创建一个新的视图。您可能会崩溃,因为后台线程试图更改旧线程上的状态。(它可能也有问题,因为后台线程不在UI线程上)我建议让mHandler不稳定,并在方向发生变化时更新它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android