我编写了一个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解决问题,但应用程序最终会崩溃。有任何建议请。