2012-01-09 7 views
0

私はサービスとmapActivityを持っています。 私はエラーが発生します: looper.prepare();を呼び出していないスレッド内でハンドラを作成できません。更新UI MapViewからサービス

私のコード:

private void startService() { 

    timer.scheduleAtFixedRate(new TimerTask() { 

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

}  
} 
+0

エラーは何ですか? –

答えて

0

あなたがバックグラウンドサービスにUIコードを持つことはできません。サービス内で実行されているものは、アプリのUIスレッドではなくバックグラウンドスレッドで実行されます。つまり、そこからUIを変更することはできません。だからこそあなたは誤りを得る。

座って考えてみると、アーキテクチャ上、バックグラウンドサービスにUIコードを持つ理由はありません。地図を描くことはまったく前景の操作であり、地図アクティビティが終了するとすぐに問題はなくなります。したがって、バックグラウンドコードをサービス内に置く必要はありません。すべてのオーバーレイコードは、フォアグラウンドマップアクティビティに属します。

+0

バックグラウンドサービスの出力パラメータをUIスレッド/アクティビティに渡して更新する方法は? – santBart

+0

バックグラウンドサービスからフォアグラウンドアクティビティへのデータ送信は、サービス内でsendBroadcastを呼び出し、そのアクティビティでBroadcastReceiverを実装することによって行われます。これを見てください:http://stackoverflow.com/questions/4461832/android-broadcast-from-service-to-activity。フォアグラウンド・アクティビティでデータを受け取ったら、UIを変更できます。 – Theo

関連する問題