Runnable中的AsyncHttpClient

时间:2014-11-11 07:41:06

标签: java android handler runnable asynchttpclient

在我的应用中,我需要实现某种聊天。但是我没有使用longpoll连接,而是每5秒向服务器发送get个请求。聊天不是我的应用程序中的主要功能。 我使用Handler发布了Runnablerun方法我使用AsyncHttpClient发布了chatHandler = new Handler(); chatRunnable = new Runnable() { @Override public void run() { final int pos = adapter.getCount(); AsyncHttpClient client = new AsyncHttpClient(); client.addHeader("X-Auth-token", User.getInstance(getApplicationContext()).getToken()); client.addHeader("clienttype", "android"); try { client.addHeader("clientvesrion", (getPackageManager().getPackageInfo(getPackageName(), 0)).versionName); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } RequestParams params = new RequestParams(); params.add("todo_id", todo.getServerId() + ""); params.add("from_id", messages.size() == 0 ? "0" : messages.get(messages.size() - 1).getId() + ""); client.setTimeout(5000); client.get(getApplicationContext(), getString(R.string.server_path) + getString(R.string.path_messages_from_id), params, new AsyncHttpResponseHandler(){ ... }); } }; chatHandler.postDelayed(chatRunnable, 5000); 。 这是代码:

client.get()

但是,有时这会在FATAL EXCEPTION: main java.lang.OutOfMemoryError: thread creation failed at java.lang.VMThread.create(Native Method) at java.lang.Thread.start(Thread.java:1050) at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:913) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1295) at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:81) at com.loopj.android.http.AsyncHttpClient.sendRequest(AsyncHttpClient.java:893) at com.loopj.android.http.AsyncHttpClient.get(AsyncHttpClient.java:612) at ru.dotcapital.controlmanager.ChatActivity$1.run(ChatActivity.java:115) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5365) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) at dalvik.system.NativeStart.main(Native Method) 崩溃并出现以下错误:

ChatActivity

google上的一些参考说当你有很多活动在运行但没有完成时会发生这种情况,并且很多AsyncTasks一次运行,但我的{{1}}是第3次活动。用户会打电话,我没有AsyncTasks错误出现时及时运行。 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我无法从此代码中看到更广泛的背景信息,但根据您的问题,您说您每隔5秒钟就会做一些事情,即使您没有这样做,您是否可以执行此例程互联网?我也没有看到你使用close()方法关闭客户端。即使没有响应,不调用close()也不会释放资源,而且连续调用只会填满内存。