【Android】Serviceで作成したViewを使う
Activityで立ち上げた時にServiceで作成したViewを使用する時に躓いたところを上げておきます。
■やりたい流れ
1.先にViewを生成しておく(Service)
★Activity起動
2.ActivityとServiceをBindする(Activity)
3.Serviceで先に作っておいたView①を( ゚д゚)クレ(Activity)
4.やったね。なんか少し早くなった気がするよ。
1回目のActivityの起動は成功し、
2回目のActivityの起動時に下記のようなエラーが出ました。。。
04-25 23:34:12.393: E/AndroidRuntime(24746): Process: com.example.serviceview, PID: 24746
04-25 23:34:12.393: E/AndroidRuntime(24746): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
これはServiceで生成したView自身が親Viewの状態を持っているため。
2回目の起動時にはすでに一度目の起動時の親Viewを持ってしまっているためにエラーが出てたようです。
なので、Serviceで作ったViewのデータをActivityに渡す際には一度Service側で親Viewを削除してから、Activityに渡すことで上記のエラーを解決することが出来ました。
public View getSetUpView(){ ViewGroup view = (ViewGroup) mView.getParent(); if(view != null) view.removeView(mView); return mView; }
プロジェクトのサンプル
https://github.com/ginsyama/ServiceView