У меня есть 2 просмотра в моем сервисе, и я хочу переключить их в зависимости от ситуации.Что я делаю, чтобы сделать переключение, удалить первый вид, а затем добавить второй вид.Вот мой код:
public void switchView(boolean toCallView) {
if (toCallView) {
if (lockScreenLayout != null && lockScreenLayout.getParent() != null && lockScreenLayout.getWindowToken() != null)
windowManager.removeView(lockScreenLayout);
if (callScreenLayout != null && callScreenLayout.getWindowToken() == null)
windowManager.addView(callScreenLayout, layoutParams);
} else {
if (callScreenLayout != null && callScreenLayout.getParent() != null && callScreenLayout.getWindowToken() != null)
windowManager.removeViewImmediate(callScreenLayout);
if (lockScreenLayout != null && lockScreenLayout.getParent() != null && lockScreenLayout.getWindowToken() == null)
windowManager.addView(lockScreenLayout, layoutParams); // exception raise here
}
}
Но в некоторых случаях я все еще получаю сбой приложения со следующим исключением:
ACRA caught a RuntimeException for com.myapp
java.lang.RuntimeException: Error receiving broadcast Intent { act=intent.activate.incoming.call.screen flg=0x10 (has extras) } in com.myapp.activity.LockScreenService$9@e94ff0a
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:895)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:234)
at android.app.ActivityThread.main(ActivityThread.java:5524)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IllegalStateException: View android.widget.RelativeLayout{d4d82ee V.E...... ......ID 0,0-720,1184} has already been added to the window manager.
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:281)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:86)
at com.myapp.util.IncomingCallHandler.switchView(IncomingCallHandler.java:73)
at com.myapp.activity.LockScreenService$9.onReceive(LockScreenService.java:270)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:885)
... 7 more
Может кто-нибудь дать мне подсказку, как этого избежать.