码迷,mamicode.com
首页 > 编程语言 > 详细

关于开启线程与UI的操作

时间:2017-07-18 21:05:04      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:ext   bundle   cti   logs   ctas   pre   创建   相关   程序启动   

当应用程序启动,创建了一个叫“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的操作

标签:ext   bundle   cti   logs   ctas   pre   创建   相关   程序启动   

原文地址:http://www.cnblogs.com/zhoushenglei/p/7202506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!