服务使用越来越多的内存

时间:2016-08-11 20:20:08

标签: android android-service

我在应用上有一项服务需要无限期运行 - 即使应用已关闭。它将ping网络源,如果状态发生更改,则服务必须触发通知。用户选择触发服务中的ping的循环,最小值为5000ms(5秒)。我有一个单独的线程(在UI线程之外)ping,调用处理程序线程将toast(编程时暂时)发布到UI线程。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Toast successMessage = Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT);
    successMessage.show();

    //sendToastOnUIThread(1000);

    new Thread(new Runnable(){
        public void run() {
            while(true) {
                try {
                    Thread.sleep(GLOBAL_PING_TIMER);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                sendToastOnUIThread();
                //Code for pings here...


            }

        }
    }).start();

    return START_STICKY;
}

上面你可以从服务中看到我的onStartCommand - 在测试时,我只使用上面的代码并省略了我的代码来ping网络源等。

你想知道在sendToastOnUIThread();'

中是什么
public void sendToastOnUIThread(){

    Handler h = new Handler(AutoPingServerService.this.getMainLooper());

    h.post(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(AutoPingServerService.this,"Servers Pinged",Toast.LENGTH_SHORT).show();
        }
    });

}

所以当这个服务运行的时候,我每隔5秒就会收到一次祝酒,但服务内存只是堆积起来(似乎上限为8.5mb),但是从1mb左右开始,每个循环只需要0.1mb左右。我是不是以某种方式制作了太多的主题?应该只有UI线程,处理ping的新线程和处理程序线程在我需要时发布toast(一旦它工作就会替换为通知)

开放思想 - 对Android开发来说相当新,如果我使用所有错误的线程类型,我不会感到惊讶。可能这是正常的吗?

编辑:拼写。

1 个答案:

答案 0 :(得分:0)

好好更新任何好奇的人:

一段时间(pweh)内存确实会被擦除,因为你已达到终端容量。不确定这是否理想,但是嘿 - 我不打算以数百万的价格出售它,如果应用程序崩溃,我会更新这篇文章。不要解决那些没有破坏的事情吗?

无论如何 - @Deev友好地说我应该转移到IntentService,但事实并非如此。我可能会在将来,但这种方法有效(尽管使用IntentService看起来确实简单)。