Here, in this answer Activity
实例保存在WeakReference<Activity>
变量中。这样可以避免内存泄漏。这样做是一种好习惯吗?
public class BackgroundService extends IntentService {
private static WeakReference<Activity> mActivityRef;
public static void updateActivity(Activity activity) {
mActivityRef = new WeakReference<>(activity);
}
}
我正在使用mActivityRef.get()
并将其投射到所需的活动对象。使用该对象,访问活动中的方法。
目的是从服务访问Activity方法,这段代码完成了工作但是根据评论我很困惑是否使用它
我提到了document但还不清楚。
答案 0 :(得分:2)
这样做是否是一种好习惯?
没有
目的是从服务
访问Activity方法
该活动可能不存在。例如,用户可以在服务运行时按BACK并销毁活动。对被破坏的活动调用方法可能会导致崩溃。
使用事件总线(LocalBroadcastManager
,greenrobot的EventBus等)进行组件之间松散耦合的通信,例如服务和活动之间的通信。让活动在可见时注册事件,并根据需要提供服务发布事件。
答案 1 :(得分:0)
将Activity
的引用存储在项目的任何位置并不是一个好习惯,但是如果你想这样做,请创建一个interface
实现你的活动与接口并传递该接口作为一种沟通方式您的活动和IntentService
对您的服务。
现在,您的服务引用了您的活动(选定)方法。通过该界面访问您的数据,并在使用后清除参考。