
一文带你了解 ViewModel 的使用及源码解析 - 知乎

ViewModel应该与Activity或Fragment紧密结合使用,因此它注定要存在于应用程序的UI层中。因此,人家不建议在Service中使用ViewModel。可以将Service和ViewModel的公共代码抽出。
具体参考:
https://github.com/android/architecture-components-samples/issues/137#issuecomment-327854042
- public static MainActivity getInstance() {
- return index;
- }
- private static MainActivity index;
- private final ServiceConnection mTrackConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- mapTrackIBinder = (MapTrackService.MapTrackIBinder) service;
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- mapTrackIBinder = null;
- }
- };
-
- @Override
- protected void initUI() {
- index = this;
- // 绑定轨迹服务
- MapTrackService.startService(this);
- Intent trackIntent = new Intent(MainActivity.this, MapTrackService.class);
- mTrackServiceUnbind = bindService(trackIntent, mTrackConnection, BIND_AUTO_CREATE);
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- index = null;
- if (mTrackServiceUnbind) {
- unbindService(mTrackConnection);
- mTrackServiceUnbind = false;
- }
- }
解决的方法如上图所示,直接引用单例模式,直接在绑定service 的UI界面上做单例,service在UI界面上绑定,在UI界面销毁的时候解除绑定。然后我们就可以在service里面做引用啦。引用的方法如下:
MainActivity.getInstance().viewModel.updataInfo(datas);
确实会比较简单粗暴,但是呢?如果大家有更好的解决方案,欢迎来评论哈。加油,共勉!
参考链接:
Android 在Service中使用ViewModel_android service viewmodel-CSDN博客