在活动结束后仍要跟踪活动的最佳实践是什么?

时间:2019-07-24 14:39:19

标签: android

这是我面临的情况: 我有一个活动(A),用户可以在其中下载内容(在SDK的帮助下)。下载开始,并且有一个事件侦听器,可在下载内容时监听来自SDK的事件(包括下载进度,该进度会更新我的活动中的进度条)。

现在,如果用户按下“后退”按钮来浏览其他活动,则该活动(A)的状态将丢失。不过,下载可以继续进行,并且可以正常运行,但是由于活动(A)在按下时完成,因此当用户返回该活动时,将创建一个新的事件侦听器实例,其中没有有关“已下载”内容以正确更新进度条。

解决此问题的最佳实践是什么?这样,当用户按下“后退”按钮时,事件监听器就不会终止。

这是我的代码在活动A中的样子:

private final DownloadEventListener downloadEventListener = new DownloadEventListener() {
    @Override
    public void onDownloadProgress(@NonNull Video video, @NonNull DownloadStatus status) {
        updateDownloadProgressBar(status.getProgress())

    } 
}

屏幕截图:https://imgur.com/0sksBYM

SDK会定期提供下载进度,这使我能够相应地更新进度栏。但是,正如我提到的,如果用户按下“后退”按钮转到另一个活动并返回到该活动,则事件侦听器将消失。

任何想法如何解决这个问题?我可以有一个公共事件侦听器吗?

1 个答案:

答案 0 :(得分:1)

这正是服务的目的。服务与可以在后台运行的活动(没有UI)相同。根据{{​​3}}:

  

服务是可以在后台执行长时间运行的操作的应用程序组件,并且不提供用户界面。另一个应用程序组件可以启动服务,并且即使用户切换到另一个应用程序,它也可以在后台继续运行。此外,组件可以绑定到服务以与其进行交互,甚至可以执行进程间通信(IPC)。例如,一项服务可以从后台处理网络事务,播放音乐,执行文件I / O或与内容提供者进行交互。

因此,尽管服务可以在使用其他应用程序的同时在后台运行,但是您也可以在运行其他活动时使用它。