1

大家好,因为我使用的是一个按钮,单击该按钮它连接到一个 Web 服务。但问题是,当我按下按钮时,它并没有向我显示它已被点击并连接到互联网和网络服务。连接后它向我显示它已被点击的响应。总之按钮的反应很慢。如果该按钮在其侦听器中有一些 Internet 连接。我知道它与 UI 线程有关。但请朋友们指导我完成这个。

非常感谢,

4

4 回答 4

1

您必须使用 Handler 进行此后台操作已在操作系统上询问此链接 进度对话框未在 android 中显示?

于 2011-05-11T09:38:49.887 回答
1

你应该写一个类 MyWebService 并从 AsyncTask 扩展它。在其重写的 doInBackground() 方法中执行连接操作,并在其 onPostExecute() 方法中更新任何 UI 更改。

于 2011-05-11T09:40:08.290 回答
1

在 onClickListener 中创建一个新线程,在后台执行繁重的工作。这样 UI 线程将能够更新按钮的状态:

button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        new Thread(new Runnable() {

        @Override
        public void run() {
            // Code that connects to web service goes here...
        }
    }).start();
});
于 2011-05-11T09:41:38.447 回答
1

将以下代码放入您的课程中:

 // Need handler for callbacks to UI Threads
    // For background operations
    final Handler mHandler = new Handler();

    // Create Runnable for posting results
    final Runnable mUpdateResults = new Runnable() {
        public void run() {
            // Do your task which needs to get done after webservice call is complete.
        }
    };

对于调用 web 服务,请在按钮事件中使用以下代码:

new Thread() {
            public void run() {             
                // Place the webservice call here.   

                mHandler.post(mUpdateResults);
            }
            }.start();

实际上你要找的是多线程,所有的 web 服务调用和网络活动都应该放在单独的线程中。在线程 start() 调用之后,您可以做任何您想做的事情,并且会立即完成,不会有任何延迟(在您的情况下显示按下该按钮)。

于 2011-05-11T09:42:56.790 回答