Android后台服务在运行一段时间后停止运行

时间:2014-03-29 07:13:41

标签: android json service sms-gateway

我编写了一个SMS网关应用程序,它将通过广播接收器拦截传入的消息,并使用内容提供商将其存储到自定义SQLite数据库中,这部分工作得非常好,而且从未失败。

在同一个应用程序中,我创建了一个服务,它调度TimerTask每10秒运行一次,查找存储的消息并使用json将它们转发到Web应用程序URL,然后检索Web应用程序生成的回复消息并发送它们使用SmsManager进行接收。

使用onStart()方法启动计时器任务,如下所示:

@Override
public void onStart(Intent intent, int startId){

    updateNotification("Ready...");

    if(mTimer != null){
        mTimer.cancel();
    }else{
        mTimer = new Timer();
    }
    // schedule the the timer task
    mTimer.scheduleAtFixedRate(new JanjaTask(), 0, 1000*RECURSIVE_TIMER_SECONDS);

}

并且计时器任务写成如下:

private class JanjaTask extends TimerTask{

    @Override
    public void run() {

        mHandler.post(new Runnable(){

            @Override
            public void run() {

                List<JanjaMessage> messages = mDB.getAllPendingMessages();       

                if(!messages.isEmpty()){
                    Log.d("Janja Service:", "Processing Local pending messages..."); 
                    for (JanjaMessage msg : messages) {
                        sendJson(msg.getSender(), msg.getMessage(), msg.getTimestamp(), msg.getID());
                    }
                }else{                  
                    if(REPLY_ONLINE_MESSAGES){
                        Log.d("Janja Service:", "Processing Online pending messages...");
                        sendJson("replicator", "checking for pending message", "", 0);
                    }
                }
            }

        });
    }

}

用于启动服务的代码如下所示:

Intent janjaIntent = new Intent(getBaseContext(), JsonRemoteService.class);
startService(janjaIntent);

问题 这在启动应用程序主UI时开始正常,并且当设备启动时它将按预期工作一段时间(可能是20到30分钟)然后停止发送到电话的所有消息将不会转发到服务器,直到手机重新启动或您明确从正在运行的服务列表中终止服务,然后消息得到回复

在Android 2.x手机中,当您转到设置&gt;应用程序&gt;正在运行服务你会发现它名称中包含1个进程和1个服务,它可以像facebook和whatsapp一样保持运行状态而不会响应,直到我从那里停止或重新启动手机。< / p>

我非常感谢你在这个问题上的帮助

注意 我试图使用Alarms和IntentService解决问题,但应用程序最终会崩溃。有任何建议请。

0 个答案:

没有答案