我最终使用了服务并解决了我的问题,如下所示:
在我的方法中,我绑定到它:onCreate
Application object
MyService
serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder iBinder) {
service = ((MyService.MyLocalBinder) iBinder ).getService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
Intent intent = new Intent(this, MyService.class);
getApplicationContext().bindService(intent, serviceConnection, BIND_AUTO_CREATE);
将服务绑定到应用程序上下文应使该服务保持活动状态,只要该应用程序未被销毁。在我得到一个ViewModel的实例,通过这样的MyService
AndroidViewModelFactory
MyViewModel myViewModel = ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication()).create(MyViewModel.class);
并且我能够通过这样的方式从ViewModel中观察获取的实时数据observeForever
Observer<List<Entry>> obsEntries = new Observer<List<Entry>>() {
@Override
public void onChanged(@Nullable List<Entry> entries) {
//perform calculations with entries in here
}
};
viewModel.getEntries().observeForever(obsEntries);
重要:从服务的 LiveData 引用中删除观察者(这就是我保留对 Observer 对象的本地引用的原因):onDestroy
@Override
public void onDestroy() {
super.onDestroy();
viewModel.getEntries().removeObserver(obsEntries);
}
谢谢大家!