android - 使用 BroadcastReceiver 启动 AsyncTask

标签 android android-asynctask broadcastreceiver

我正在尝试在收到推送通知时更新 UI 的状态。为此,我需要启动一个 AsyncTask 来执行一些网络操作,然后根据结果更新 UI。

根据 BroadcastReceiver 的文档,在接收器中执行异步操作是不安全的,因为执行它的进程可能会在 onReceive() 返回时立即终止,假设有在该过程中没有其他“应用程序组件”。

BroadcastReceiver 是在它自己的进程中运行,还是在与包含它的 Activity 相同的进程中运行?因为只要有要更新的 UI,我只关心任务的完成情况,所以我不担心 AsyncTask 在 Activity 关闭时死亡。假设 BroadcastReceiver 与 Activity 处于同一进程中,这是否可以/安全地启动我在接收器中描述的任务?

编辑:

澄清一下,我在 Activity 的 onResume() 中注册接收器并在 onPause() 中注销它,因此它应该只在 Activity 已经结束时接收 Intent 活跃。

最佳答案

广播接收器不是在它自己的进程上运行,而是在 UI 线程上运行。

只有当您的应用程序中没有其他 Activity 或服务正在运行时,您的进程才会在 onReceive 方法返回后被终止。

如果您的广播接收器是内部类的一个实例,并且仅在您的 Activity 处于 Activity 状态时接收,那么您的进程在 onReceive 方法返回后不会被终止。

关于android - 使用 BroadcastReceiver 启动 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697053/

相关文章:

java - 如何从 26 API 以上的后台应用程序启动 Activity ?

java - 抽屉导航透明工具栏

java - Android:build.gradle中的API兼容性问题

android - 从 ClusterManager 获取标记

android - 使用异步任务

android - Android 中的自定义来电 GUI

Android AsynchTask 在其调用 Activity 完成时工作

android - 如何在开始新 Activity 时放置进度条

java - Android: NullPointerException: println 需要一条消息;

android - Xamarin:当应用程序未运行时 BroadcastReceiver 未收到