您的位置:首页 > 移动开发 > Android开发

Android 多线程及多线程中更新控件。

2015-11-19 21:43 459 查看
在Android 多线程中要注意的一点是, 在多线程中不能够更新界面的控件, 因为控件的更新只能由主线程来完成。

   但是我们可以通过Handler 这个对象来对主线程中的控件进行更新。

   在多线程中如果想更新主线程的控件, 需要向主线程的Handler对象发送一个消息及参数, 让更新在该对象方法中处理。

  首先我们要在主Activity中定义一个Handler对象做为成员变量。

[java] view
plaincopy

public Handler handler = new Handler()  

    {  

  

        @Override  

        public void handleMessage(Message msg)  

        {  

            switch (msg.what)  

            {  

            case 0:  

                {  

                    //取出参数更新控件  

                    textX.setText(msg.getData().getString("x"));      

                }  

                break;  

            default:  

                break;  

            }  

            super.handleMessage(msg);  

        }  

          

    };  

下面是多线程的部分, 如果不需要更新控件, 可以直接参考这段写多线程。 

[java] view
plaincopy

//多线程  

    private Runnable accRunnable = new Runnable()  

    {  

        //多线程运行方法  

        public void run()  

        {  

            int x = 0;  

            while(true)  

            {  

                //异常抓取  

                try  

                {  

                    //该部分是传参并更新控件  

                    Message msg = new Message();  

                    msg.what = 0;  

                    Bundle bundle = new Bundle();  

                    bundle.putString("x", x + "");  

                    msg.setData(bundle);  

                    //发送消息到Handler  

                    handler.sendMessage(msg);  

                    x++;  

                } catch (InterruptedException e)  

                {  

                    e.printStackTrace();  

                }  

            }  

        }  

    };  

多线程方法写完后, 我们还需要在要启动它的地方添加方法。

这里就在程序启动时启动线程吧。

这里需要先定义一个成员变量 Thread  accThread;

[java] view
plaincopy

public void onCreate(Bundle savedInstanceState)  

    {  

          

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.main);  

  

//创建一个新的线程并运行.  

accThread = new Thread(accRunnable);  

        accThread.start();  

    }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: