为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

小怪兽爱吃肉 2019-06-29 14:45:14
当进程对话框和后台线程活动时,如何处理屏幕方向的变化?我的程序在后台线程中做一些网络活动。在开始之前,它会弹出一个进度对话框。对话框在处理程序上被取消。这一切都很好,除非当对话框打开时屏幕方向发生变化(后台线程正在进行)。此时,应用程序要么崩溃,要么陷入死锁,或者进入一个奇怪的阶段,在所有线程被杀死之前,应用程序根本无法工作。怎样才能优雅地处理屏幕方向的变化?下面的示例代码大致符合我的实际程序所做的工作: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处于部分绘制状态。需要杀死整个应用程序才能重新开始工作。
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

当您切换方向时,Android将创建一个新的视图。您可能会崩溃,因为后台线程试图更改旧线程上的状态。(它可能也有问题,因为后台线程不在UI线程上)

我建议让mHandler不稳定,并在方向发生变化时更新它。


查看完整回答
反对 回复 2019-06-29
  • 3 回答
  • 0 关注
  • 454 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信