Android thread.start()和runOnUiThread(thread);

时间:2011-11-20 07:57:49

标签: android multithreading button

这段代码有什么问题?当我像这样实现它时,我的应用程序正常工作。

public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        textOut = (EditText) findViewById(R.id.textout);
        IPAddress = (EditText) findViewById(R.id.editTextIPAddress);
        Button buttonSend = (Button) findViewById(R.id.send);
        Button buttonSet = (Button) findViewById(R.id.set);
        textIn = (TextView) findViewById(R.id.textin);
        buttonSend.setOnClickListener(buttonSendOnClickListener);
        buttonSet.setOnClickListener(buttonSetOnClickListener);


        Thread myThread = new Thread()
        {
            public void run()
            {
                runClient();
            }// end method run
        };// end myThread
    }// end method onCreate

但是当我以这种方式实现它时。它强行关闭:

Button.OnClickListener buttonSetOnClickListener = new Button.OnClickListener()
    {

        @Override
        public void onClick(View arg0)
        {
            myThread.start();
        }// end method onClick
    };
Thread myThread = new Thread()
    {
        public void run()
        {
            runClient();
        }// end method run
    };// end myThread

我能够尝试这个,但它改变了程序的逻辑:

Button.OnClickListener buttonSetOnClickListener = new Button.OnClickListener()
    {

        @Override
        public void onClick(View arg0)
        {
            runOnUiThread(myThread);
        }// end method onClick
    };

    Thread myThread = new Thread()
    {
        public void run()
        {
            runClient();
        }// end method run
    };// end myThread

第一个代码在调用onCreate()后运行myThread。问题是我想在按下按钮后运行myThread。但这样做会导致部队关闭。是什么原因导致此力关闭,如果按下按钮,我该怎么做才能运行一个线程?

1 个答案:

答案 0 :(得分:0)

不应在UI线程上执行时间/资源密集型操作。所以runOnUiThread(myThread)可能不是一个好主意。

此外,UI无法在其他线程上进行操作。

我认为您应该使用AsyncTask界面。

http://android-developers.blogspot.com/2009/05/painless-threading.html