服务使用越来越多的内存



我在应用程序上有一个服务,需要无限期地运行-即使应用程序关闭。它将ping一个网络源,如果状态改变,那么服务必须触发一个通知。触发服务中ping的循环由用户选择,最小值为5000ms(5秒)。我在一个单独的线程(离开UI线程)上有ping,调用处理程序线程将祝词(在编程时临时)发送到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开发,我不会感到惊讶,如果我使用所有错误的线程类型。这可能是正常的?

编辑:拼写。

好了,给好奇的人更新一下:

内存会在一段时间(pweh)后被擦除,因为您将达到终端容量。不确定这是否理想,但嘿-我不会卖数百万,如果应用程序崩溃,我会更新这篇文章。不要修理没有坏的东西,嗯?

无论如何- @Deev善意地说我应该转移到IntentService,我没有。我可能会在未来,但这个方法工作(虽然它看起来更简单,使用IntentService)。

最新更新