ilu*_*a.b 6 android android-mvvm
我正在使用MVVM模式开发小型 Android 应用程序。我的问题是ViewModelMyActivity 中的观察者没有从后台调用。即使应用程序位于后台,我也需要调用它,以Notification向用户显示应用程序计算过程已完成且结果已准备就绪。
这是当前的实现,onCreate位于MyActivity:
mainActivityViewModel.getTestResult().observe(MainActivity.this, new Observer<String>() {
@Override
public void onChanged(@Nullable String blogList) {
Toast.makeText(getApplicationContext(), "test...", Toast.LENGTH_SHORT).show();
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)){
//The app is in foreground - showDialog
}else{
//The app is in background - showNotification
}
}
Run Code Online (Sandbox Code Playgroud)
目前,仅当应用程序位于前台时才会调用此观察者 - 如果应用程序位于前台时完成进程 - 'showDialog' 将触发,如果应用程序位于后台 - showNotification 将触发 - 但只有在我打开之后再次打开该应用程序。这不是我试图实现的行为。请帮忙!谢谢。
onChangedActivity仅当当前Lifecycle状态至少为 时才会被调用STARTED。onPause当您离开 时会被呼叫Activity,这意味着它至少不是STARTED。
LiveData根本不适合您想要实现的行为。
我建议您改用前景Service。特别是如果所提到的“计算过程”是用户应该了解的。
编辑:假设您正在后台执行一些可能长时间运行的任务,并且您希望继续执行此任务,即使用户将离开甚至关闭您的Activity. 那么使用 aService是一个不错的选择,特别Service是如果任务是用户操作的结果,则使用前台。例如,用户单击“上传”按钮,前台Service执行任务,并且关联的内容Notification为“上传正在进行”。
您可以选择
Notification,无论Activity是否显示。这很常见。Notification仅当当前Activity未启动时才显示,如果已启动,则在Activity视图中显示某些内容。为了执行后一个选项,您需要了解 的当前Activity状态Lifecycle。您希望能够以某种方式从您的服务中进行以下检查:getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)
Activity在和之间进行通信的最佳方式Service是绑定到Service并扩展Binder服务中的类。
绑定后,您可以将Activity Lifecycle状态存储在 中的变量中Service,甚至将其Activity本身提供给Service.
| 归档时间: |
|
| 查看次数: |
3853 次 |
| 最近记录: |