我是android的初学者,并制作了一个向tomcat web服务器发送REST http请求的android应用程序。在LAN中运行的tomcat Web服务器。应用程序不需要互联网执行。所有REST HTTP请求都在LAN / WIFI中执行。
问题是REST请求在android中执行得很慢。与IOS相同的应用程序,当从iPad发送REST请求时,它执行速度非常快且速度不慢。在ios中,我们直接在按钮点击时发送REST HTTP请求。
我知道我们无法在Android中从UI进行网络操作,因为它给出了这个“android.os.NetworkOnMainThreadException”。
所以我使用asyn任务来执行对服务器的发送请求。 当我发送来自android 4.1 samsung平板电脑的REST http请求时,当我尝试发送另一个请求时,第一个请求会很快执行,但它会变慢。
以下是我的活动代码
public class RestActivity extends Activity {
public void btnSendRequestClick(View view)
{
HttpUriRequest objHttpURL = null;
objHttpURL = new HttpGet(url);
objHttpURL.addHeader("typ", "device");
RESTAsyncTask objAsyncTask = new RESTAsyncTask();
objAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
objHttpURL);
}
class RESTAsyncTask extends AsyncTask<HttpUriRequest, Void, String> {
@Override
protected String doInBackground(HttpUriRequest... params) {
HttpClient httpClient = new DefaultHttpClient();
// HttpResponse response =
// httpClient.execute(sendHttpURL,
// localContext);
try {
HttpResponse response = httpClient.execute(params[0]);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
};
}
我尝试下面的代码但结果相同。
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
当我们获取需要互联网连接的执行请求时,延迟是可以接受的,就像我们从在线获取推文json数据一样。在这种情况下,速度无关紧要。但我的应用程序需要快速执行REST http请求。
如果有人知道如何解决这个问题,请帮助我。