Android 在WeakReference中保存活动实例是一种好做法吗

Android 在WeakReference中保存活动实例是一种好做法吗,android,android-activity,intentservice,weak-references,Android,Android Activity,Intentservice,Weak References,Activity实例保存在WeakReference中,但尚未清除 这样做是一种好的做法吗 public class BackgroundService extends IntentService { private static WeakReference<Activity> mActivityRef; public static void updateActivity(Activity activity) { mActivityRef = ne

Activity
实例保存在
WeakReference中,但尚未清除

这样做是一种好的做法吗

public class BackgroundService extends IntentService {
    private static WeakReference<Activity> mActivityRef; 

    public static void updateActivity(Activity activity) {
        mActivityRef = new WeakReference<>(activity);
    }
}
没有

目的是从服务访问活动方法

这种活动可能不存在。例如,用户可以在服务运行时按BACK键并销毁活动。对已销毁的活动调用方法可能会导致崩溃


使用事件总线(
LocalBroadcastManager
、greenrobot的事件总线等)实现组件之间的松散耦合通信,例如服务和活动之间的通信。在活动可见时注册活动,并根据需要注册service post事件。

否在项目中的任何位置存储
活动的引用不是一种好做法,但如果您愿意,创建一个
接口
使用接口实施您的活动,并将该接口作为活动与
IntentService
之间的通信方式传递给您的服务


现在,您的服务具有活动(选定)方法的引用。通过该接口访问您的数据,并在使用后清除引用。

我已经实现了它正在执行任务,但我们可以信任此广播吗?我不知道你所说的“相信这个广播”或“总是被提及”是什么意思。根据定义,某些事件可能没有注册。但是,在这种情况下,服务可以找到它并采取其他步骤。例如,您可以发送本地广播,如果没有前台用户界面来接收事件,则服务可以发出
通知。看见