zoukankan      html  css  js  c++  java
  • Android笔记(子线程通过Handler修改UI)

    2015-09-12

    线程

    MainThread与WorkerThread

    WorkerThread里面一般不允许修改UI,而在MainThread里面又不宜进行可能产生阻塞的操作,所以会产生MainThread和WorkerThread通信的问题,就出现handler,looper来解决此问题

    2015-09-13

    什么是Handler

    Handler,Looper(循环器)和MessageQueue的基本原理

    Message(消息)------------>(通过Handler放入)------------>【消息队列】--------->(Looper取出消息)

    2015-09-14

    由于WorkerThread一般不允许修改UI,所以要新建Handler内部类,在WorkerThread里面调用handler方法,获取网络数据;在Handler里用handleMessage方法修改textView,在主线程中新建Handler对象.(handler就相当于一个中间工具,实现把子线程的数据传到主线程)

    public class MainActivity extends Activity {

        private TextView textView;

        private Button button;

        private Handler handler;

       

        @Override

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

           

            textView = (TextView)findViewById(R.id.textView);

            button = (Button)findViewById(R.id.button);

            handler = new MyHandler();

           

            button.setOnClickListener(new ButtonListener());

           

          

        }

     

     

        @Override

        public boolean onCreateOptionsMenu(Menu menu) {

            // Inflate the menu; this adds items to the action bar if it is present.

            getMenuInflater().inflate(R.menu.main, menu);

            return true;

        }

      class ButtonListener implements OnClickListener{

     

        @Override

        public void onClick(View arg0) {

            Thread thread = new NetworkThread();

            thread.start();

        }

         

      }

      class MyHandler extends Handler{

     

        @Override

        public void handleMessage(Message msg) {

            String s =(String)msg.obj;

            textView.setText(s);

        }

         

      }

        class NetworkThread extends Thread{

     

            @Override

            public void run() {

                try {

                    Thread.sleep(2 * 1000);

                } catch (InterruptedException e) {

                    e.printStackTrace();

                }

                String s = "从网络中获取数据";

                Message msg = handler.obtainMessage();

                msg.obj = s;

                handler.sendMessage(msg);

               

               

            }

           

           

    }

  • 相关阅读:
    维克里拍卖 Vickrey auction
    弱占优策略--Weakly Dominant Strategy
    乱码电路(Garbled circuits)
    P和NP问题
    揭秘Facebook首个数据中心:全球15亿用户的账户信息都在这里
    数学符号“s.t.”的意义
    PKI系统深入介绍
    [转]公钥,私钥和数字签名这样最好理解
    Exif
    任我行 CRM 9.4
  • 原文地址:https://www.cnblogs.com/aisi-liu/p/5035144.html
Copyright © 2011-2022 走看看