Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在后台运行代码,完成后更新UI_Android_Android Asynctask_Background Process_Timertask - Fatal编程技术网

Android 在后台运行代码,完成后更新UI

Android 在后台运行代码,完成后更新UI,android,android-asynctask,background-process,timertask,Android,Android Asynctask,Background Process,Timertask,在我的应用程序中,我需要定期从internet获取一些json数据,然后我想根据这些数据更新我的应用程序的UI。如何执行后台任务,然后在完成时更新UI?以下是我遇到的一些问题: 使用服务/警报时,我无法将json发送回活动 使用定时器/定时器任务我无法更新UI,因为只有创建视图的线程可以更改它们 使用asynctask工作正常,但我无法定期运行它 我一直在我的活动中实现一个侦听器,它在获取json时被触发。这似乎是一件直截了当的事情,我相信一定有解决办法 使用服务/警报,我无法将我的json

在我的应用程序中,我需要定期从internet获取一些json数据,然后我想根据这些数据更新我的应用程序的UI。如何执行后台任务,然后在完成时更新UI?以下是我遇到的一些问题:

  • 使用服务/警报时,我无法将json发送回活动
  • 使用定时器/定时器任务我无法更新UI,因为只有创建视图的线程可以更改它们
  • 使用asynctask工作正常,但我无法定期运行它

我一直在我的活动中实现一个侦听器,它在获取json时被触发。这似乎是一件直截了当的事情,我相信一定有解决办法

使用服务/警报,我无法将我的json发送回活动,无法使用绑定器在服务和活动之间创建连接,也无法通过广播传输数据来触发ui更新

虽然在活动和服务之间添加绑定器会起作用,但我最终还是遵循了提供的答案。它使用处理程序在异步任务完成后触发的方法中发布新任务


这对我来说效果很好,因为我已经设置了一个侦听器。

为什么您的服务/警报不能将JSON发送回活动?看看几乎所有的项目符号都是错误的-您可以从服务/警报返回数据。您可以随时从另一个线程更新UI,只需发布到执行实际UI更改的处理程序。您可以定期运行异步任务。你也可以做一根线。哪种方法是最好的,取决于更新的频率,你是否想在你的应用程序不在前台的时候这样做,等等。我的错误是,我想更新的频率相当高,但只有在我的应用程序在前台的时候;你知道哪种方法最好吗?