大家好,因为我使用的是一个按钮,单击该按钮它连接到一个 Web 服务。但问题是,当我按下按钮时,它并没有向我显示它已被点击并连接到互联网和网络服务。连接后它向我显示它已被点击的响应。总之按钮的反应很慢。如果该按钮在其侦听器中有一些 Internet 连接。我知道它与 UI 线程有关。但请朋友们指导我完成这个。
非常感谢,
您必须使用 Handler 进行此后台操作已在操作系统上询问此链接 进度对话框未在 android 中显示?
你应该写一个类 MyWebService 并从 AsyncTask 扩展它。在其重写的 doInBackground() 方法中执行连接操作,并在其 onPostExecute() 方法中更新任何 UI 更改。
在 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();
});
将以下代码放入您的课程中:
// 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() 调用之后,您可以做任何您想做的事情,并且会立即完成,不会有任何延迟(在您的情况下显示按下该按钮)。