服务使用越来越多的内存

Service Uses Increasingly More Memory

我在应用程序上有一项服务需要 运行 无限期地运行 - 即使应用程序已关闭。它将对网络源执行 ping 操作,如果状态发生变化,则该服务必须触发通知。服务中触发 ping 的循环是用户选择的,最小值为 5000 毫秒(5 秒)。我在一个单独的线程(关闭 UI 线程)上有 ping,调用处理程序线程 post toasts(在编程时暂时)到 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();
        }
    });

}

因此,当此服务 运行ning 时,我每 5 秒就会收到祝酒词,但服务内存一直在堆积(似乎上限为 8.5mb),但开始时大约为 1mb,并且还在不断增加每个循环大约 0.1mb。我是否以某种方式制作了太多线程?应该只有 UI 线程,处理 ping 的新线程和处理程序线程 post toasts 当我需要它们时(这将在它工作后被通知替换)

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

编辑:拼写。

好的更新给任何好奇的人:

一段时间后 (pweh) 内存会被擦除,因为您将达到终端容量。不确定这是否理想,但嘿 - 我不会以数百万的价格出售它,如果应用程序崩溃,我会更新此 post。不要修理没坏的东西是吗?

无论如何 - @Deev 亲切地说我应该转移到 IntentService,我没有。我将来可能会,但这种方法有效(尽管使用 IntentService 看起来确实更简单)。