我的 Activity 停止更新一些通过 handler.post 或 runonuithread 更新的视图

My Activity stops updating some Views that are updated via handler.post or runonuithread

我的应用包含

1) 一个 Activity
2)服务(前台)
3) contentProvider...在服务中写入它,在 activity

中从中读取(游标和观察者)

该服务与大约每秒报告一次数据的设备保持蓝牙连接。然后该服务将 tag/value 对写入内容提供商数据库。

activity 由一些文本视图、一些按钮和一些图像视图组成。它还使用 SpeedView 拨号包。但是,如果我不使用 speedview,问题仍然存在。

activity 订阅 contentprovider 以获取光标加载器回调来初始化屏幕,然后使用 contentObserver 来监听变化。

在 contentObserver onChange(self,uri) {} .. 里面会看到一个变化,请求 URI 的值然后继续尝试更新相应的 View。

好的,问题来了。因为回调好像我认为我理解主循环中的"not",它不能直接直接调用一些UI api ...例如试图改变TextView的文本。

在过去,这不是什么大问题,我只是想创建一个处理程序,然后按照这些思路简单地做一些事情...

TextView mytextview...
Handler mHandler = null;

onCreate() { ...  mytextview = findviewbyid(...)... 
mHandler = new Handler();// No looper means main thread I think
}

onChange(self,uri) {
....

mHandler.post(new Runnable() {
    @Override
    run() {
       mytextview.setText("the new text from the content provider");
      }
 });
  .....
}

那么问题是什么?好吧,一开始什么都没有……这有效……好吧,至少几分钟。大约 15 分钟后,有时有时很快,有时并不完全可预测。但最终 handler.post() 将不再工作。我在 handler.post 之前放置了一个日志,在开始和结束时在 运行() 中放置了一个日志......我总是看到日志完成和 GUI 更新但是对于一些因为我不会看到任何日志,除了 handler.post 之前的日志(这意味着内容提供者回调仍在工作!)

我有点不知所措为什么这会 运行 几分钟然后就停止了。它就像某种内部循环队列正在填满。

我使用 handeler.post(运行nable)) 更改文本视图或其他视图的其他尝试没有这些问题(至少我可能没有看到它们,如果activity 没有显示那么长时间或出于其他原因??!!

嗯,这不是解决方案的真正答案。但是我发现我从调用 handler.post 的观察者那里得到的更新大约是 50 毫秒。

这有点快,但它仍然不能解释为什么没有崩溃或错误。

我的解决方法似乎有效,而不是使用观察者更新来调用更新 UI 的 handler.post,而是对观察者 class 进行粗略的 POLLING 和在 100 毫秒轮询。使用 handler.postDelayed() 并在其中通过检查观察者 class 来更新 UI 每个变量的变化(轮询)以查看它们是否发生变化,如果发生变化然后更新 UI.