android后台线程怎么创建UI组件

摘要 比如在 android ProgressDialog和后台线程 中前台ui线程在显示ProgressDialog,后台线程在下载更新数据,那么更新数据完毕,会dismiss ProgressDialog对象,而且会再显示一个提示对话框,告知数据更新完毕。 触发的事件是下载完毕,这是后台线程知道的,但是

比如在android ProgressDialog和后台线程中前台ui线程在显示ProgressDialog,后台线程在下载更新数据,那么更新数据完毕,会dismiss ProgressDialog对象,而且会再显示一个提示对话框,告知数据更新完毕。

触发的事件是下载完毕,这是后台线程知道的,但是后台线程不能直接创建ui组件,这样会产生报错,比如:

image

这是因为,android只能有一个系统线程来处理绘制UI,用户创建线程不能做这件事情。

那么,需要android提供的Handler类来处理,让用户线程通知UI线程执行。在android中有关线程的处理中主要说明的是后台线程和UI线程通讯的情况。下面说明,后台线程怎么告诉UI线程执行一个过程。

见代码:

            confirmHandler.post(new Runnable() {
                @Override
                public void run() {
                    AlertDialog.Builder builder = new Builder(
                            WelComeMainActivity.this);
                    builder.setMessage("数据更新完毕。");
                    builder.setPositiveButton("确认", new OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            dialog.dismiss();
                        }
                    });
                    builder.create().show();
                }
            });
        }
    });
    t.start();
}
  
Handler confirmHandler = new Handler(Looper.myLooper());

在Activity中有个成员变量confirmHander,在后台线程内部,向该handler post一个Runnable实例,这样UI线程会执行这个Runnable实例的run方法,而不是创建新的线程。

更新完毕将显示:

image