2012-01-09 117 views
0

我有服务和mapActivity。 我想更新mapview outfrom serivce(绘制新的oerlays可以说每15秒) 我得到的错误: 不能创建处理程序内部线程没有调用looper.prepare();从服务更新UI MapView

我的代码:

private void startService() { 

    timer.scheduleAtFixedRate(new TimerTask() { 

    public void run() { 
    MyMap map = new MyMap(); // here is where app crashes...} 

}  
} 
+0

你得到的错误是什么? – 2012-01-09 02:32:36

回答

0

你不能有一个后台服务UI代码。在服务中运行的任何东西都运行在后台线程上,而不是在应用程序的UI线程上运行,这意味着您不能从那里进行UI更改。这就是你得到错误的原因。

如果您坐下来思考一下,架构上没有理由在后台服务中使用UI代码。绘制地图是一种纯粹的前景操作,只要地图活动被解散,它就不再重要。因此,无需在服务中留下背景代码 - 所有覆盖代码都属于前景地图活动。

+0

那么如何将输出参数从后台服务传递到ui线程/活动并使其更新? – santBart 2012-01-10 13:18:06

+0

通过在服务中调用sendBroadcast并在活动中实现BroadcastReceiver,使用从后台服务向前台活动发送数据。看到这个:http://stackoverflow.com/questions/4461832/android-broadcast-from-service-to-activity。一旦您在前台活动中收到数据,您可以更改UI。 – Theo 2012-01-10 18:25:05