简体   繁体   English

Runnable中的AsyncHttpClient

[英]AsyncHttpClient in Runnable

In my app I need to implement some kind of chat. 在我的应用中,我需要实现某种聊天。 But instead of using longpoll connections I am just sending get requests to server once every 5 seconds. 但是,我没有使用longpoll连接,而是每5秒向服务器发送一次get请求。 Chat is not primary function in my app. 聊天不是我应用程序的主要功能。 I'm using Handler to post a Runnable , where in run method I'm using AsyncHttpClient . 我正在使用Handler来发布Runnable ,在run方法中,我正在使用AsyncHttpClient Here's code: 这是代码:

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);

However, sometimes this crashes at client.get() with following error: 但是,有时这会在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)

Some referenses at google says that its happening when you have lots of activities running and not finished, and lots of AsyncTasks running in one time, but my ChatActivity is 3rd activity.User would call and I have no AsyncTasks running in time when the error appeared. Google的一些参考资料说,当您有很多活动在运行但尚未完成,并且有很多AsyncTasks一次运行,但是我的ChatActivity是第3个活动时,就会发生这种情况。当错误出现时,用户会调用并且我没有及时运行AsyncTasks 。 Any suggestions? 有什么建议么?

I can't see the broader context from this code, but based on your question where you said you are doing something every 5 seconds, is it possible you are doing this routine even when you don't have internet? 我无法从此代码中看到更广泛的上下文,但是基于您所说的每5秒执行一次操作的问题,即使没有互联网,您是否也可以执行此例程? I also don't see you closing the client using the close() method. 我也看不到您使用close()方法关闭客户端。 Not calling close() does not free up resources even if there is no response, and than continuous calls just fill up the memory. 即使没有响应,不调用close()也不会释放资源,而连续调用只会占用内存。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM