Android - 创建后台服务以从服务器提取更新

时间:2017-01-22 07:35:26

标签: android alarmmanager intentservice

我的想法很简单。我有一个包含多个章节的电子书应用程序。有时会将新章节上传到服务器。我希望在用户的手机中提供后台服务,从服务器提取最新章节并下载(如果有的话),可能每周或每天下载

在谷歌搜索之后,我尝试使用AlarmManager + IntentService + BroadcastReceiver,但是当用户杀死应用程序时它不起作用。我认为这是用户保存内存并在使用后杀死所有应用程序的常见操作

有没有办法将服务和应用程序拆分到不同的进程中,以便后台服务不容易被用户杀死,至少在例如对于我的手机按左按钮将查看所有正在运行的应用程序,除非他/她去设置和查看它。

谢谢!

1 个答案:

答案 0 :(得分:0)

你有2个解决方案。更好的方法是使用Sockets。然后,它的服务器责任是为您的Android设备发送更新。

另一种方式就是你所说的使用服务。您必须考虑一些要点才能让您的服务保持活力。 首先:不使用绑定服务。 第二:您必须在整个应用关闭时重新启动您的服务(它甚至不在后台)。您可以使用onTaskRemoved方法在您的服务中执行此操作。它会对你有所帮助:

    @Override
public void onTaskRemoved(Intent rootIntent) {
    Intent restartServiceIntent = new Intent(this, yourService.class);
    restartServiceIntent.setPackage(getPackageName());
    PendingIntent restartServicePendingIntent = PendingIntent.getService(this, 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT);
    AlarmManager alarmService = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmService.set(
            AlarmManager.ELAPSED_REALTIME,
            SystemClock.elapsedRealtime() + 5000,
            restartServicePendingIntent);

    super.onTaskRemoved(rootIntent);

}

告诉我它是否对你有帮助。不要犹豫,问任何其他问题:)