首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可运行中的AsyncHttpClient

可运行中的AsyncHttpClient
EN

Stack Overflow用户
提问于 2014-11-11 07:41:06
回答 1查看 590关注 0票数 1

在我的应用程序中,我需要实现某种聊天。但是,我不是使用长轮询连接,而是每5秒向服务器发送一次get请求。聊天不是我的应用程序的主要功能。我使用Handler发布Runnable,而在run方法中,我使用的是AsyncHttpClient。下面是代码:

代码语言:javascript
复制
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()上崩溃时会出现以下错误:

代码语言:javascript
复制
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)

谷歌的一些推荐人说,当你有很多活动在运行而没有完成,很多AsyncTasks在一次运行时就会发生,但是我的ChatActivity是第三次activity.User会调用,而当错误出现时,我没有AsyncTasks在运行。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-11 08:45:08

从这段代码中我看不到更广泛的上下文,但是基于你说你每5秒做一件事情的问题,即使你没有互联网,你也有可能做这个例行公事吗?我也没有看到您使用关闭()方法关闭客户端。即使没有响应,不调用close()也不会释放资源,而且与连续调用相比,只会填满内存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26859896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档