关于开启线程与UI的操作

Posted 静静的码代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于开启线程与UI的操作相关的知识,希望对你有一定的参考价值。

当应用程序启动,创建了一个叫“main”的线程,用于管理UI相关,又叫UI线程。其他线程叫工作线程(Work Thread)。

Single Thread Model(单线程模型)

一个组件的创建并不会新建一个线程,他们的创建都在UI线程中进行,包括他们的回调方法,如onKeyDown()

  • 当在UI线程中进行某些耗时的操作时,将会阻塞UI线程,一般阻塞超过5秒就会报错

UI线程是非线程安全的,所以,不能在工作线程中操作UI元素。

 

两个原则

  • Do not block the UI thread (不要阻塞UI线程)
  • Do not access the android UI toolkit from outside the UI thread (不要在工作线程中操作UI元素)

 

在工作线程更新UI方法

  • Activity.runOnUiThread(new Runnable),在子线程中直接调用
    runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        mTvShow.setText(respone);
                                    }
                                });

     

  • Handler,,在Main中新建Handle实例,重写handleMessage(),方法,在里面用接受值操作UI
    Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
               Bundle bundle = msg.getData();
                String aa = bundle.getString("aa");
                mTvShow.setText(aa);
            }
        };

    在子线程中赋值,并且传值给Handle。

    Bundle bundle = new Bundle();
    Message message = Message.obtain(); bundle.putString(
    "aa",responseData); message.setData(bundle); handler.sendMessage(message);

     

  • AsyncTask
    • execute()
    • doInBackground()
    • onPostExecute()

以上是关于关于开启线程与UI的操作的主要内容,如果未能解决你的问题,请参考以下文章

Qt Qt中实时更新UI程序示例

Android 怎么启动一个工作线程及线程如何与UI线程交互

iOS中RunLoop和线程的关系

ios NSThred多线程简单使用

iOS 子线程下载 主线程刷新UI

Android中UI线程与后台线程交互设计的6种方法