我想知道,我有一个Activity,它从IntentService接收广播,该广播需要保存数据,然后将其导出到CSV文件。但是,这可能要花费10秒钟以上的时间,而且我知道使用BroadcastReceivers启动AsyncTasks和线程时存在某些问题,它们可能在10秒钟后被杀死。我想知道,我将如何克服这个问题?
编辑:请注意,我实际上正在做的是保存来自传感器的数据,计算数据,然后导出。显然,当从另一个应用程序接收到保存命令时,该应用程序处于停止状态时,该应用程序将陷入计算状态。保存和导出使用AsyncTasks,但计算使用Thread,在该线程中,我使用Handler将消息发送回Activity。有谁知道我将如何解决这个问题?我在保存部分中使用了PendingResult,但是现在它卡在了计算部分中。
答案 0 :(得分:0)
让它启动服务来执行工作,而不是在Receiver本身中执行。
答案 1 :(得分:0)
以下是在后台保存数据的不同方法。
这实际上取决于您的要求。如果导出到csv可以忍受一点延迟,请使用WorkManager对其电池友好,并根据API级别自动使用最佳方法。
如果需要立即执行高优先级的后台操作,并且还希望通知用户,因为前台服务会通过通知托盘中的不可撤消通知对用户可见,因此请使用前台服务。例如,上传WhatsApp附件。
如果不是一个很长时间运行的后台任务,并且您不希望用户在此期间关闭该应用程序,则可以使用任何后台执行方法,例如ASyncTask,Rxjava,kotlin Coroutines。
background execution evolution。阅读和比较这些不同方法的一篇非常有趣的文章。
答案 2 :(得分:0)
我想出了一个解决方案。如建议的那样,我使用了前台服务,但是,后台线程中我对活动的回调存在问题,该问题由该服务启动,当应用程序暂停时,回调接口为null。我能够解决这个问题。
谢谢您的帮助。