首先,我要声明我已经在三天内一直在寻找这个问题的解决方案,这可能意味着我要么没有问正确的问题,要么没有使用好的方法。如果有的话,请指导我正确的方向。
这是一个场景:我有Activity
和绑定Service
。 Service
保留一些数据并根据需要对其进行处理,同时发布包含某些信息的持久(正在进行)通知。 Activity
内Fragments
有ViewPager
个Service
,显示由Fragments
处理的数据。
Activity
是列表片段,显示可用的有效数据条目,详细信息片段,显示每个数据的详细信息和参数Fragment ,用户可以在其中修改数据的处理方式。
[服务]< - > ([活动] - > [ViewPager([List],[Details],[Parameters])])
一切正常。我的Service
绑定到ViewPager
,之后创建Fragments
,然后通过Interface
创建Service
获取信息。
这里有趣的部分......屏幕旋转!
当Fragments
异步绑定时,当用户旋转屏幕时,Activity
不再拥有数据,因为ViewPager
绑定了服务,而它们已经存在且未重新创建感谢android:configChanges
。
我一直试图解决这个问题,但似乎我没有解决它的知识。我已经尝试对片段进行静态引用,在服务反弹之前设置它们但我无法获得稳定的解决方案。
我在清单中使用{{1}},但每个方向都有不同的布局。
同样,如果我使用不好的方法,请指导我!
答案 0 :(得分:2)
当我不知道你的代码但是大声思考时很难建议......
你能否拥有一个永远不会显示的“工人片段”(即无头)并设置setRetainInstance(true),这样就不会丢失你设置的任何状态。
您的工作片段将绑定到服务而不是活动,并保持对它的引用。
如果您需要与您的活动进行通信,可以使用回调来执行此操作。
您的其他片段可以与工作人员而不是活动进行通信。
此过程基本上会使活动仅仅是托管其余组件的shell。轮换将不会丢失任何内容,因为所有数据都保留在保留的片段中。
答案 1 :(得分:0)
在屏幕旋转过程中,活动被完全销毁,并且不鼓励使用android:congfigChange。但是你可以做的是你可以覆盖saveInstanceState(bundle)方法,在该方法中,你可以保存活动中存在的数据,以便系统在响应屏幕旋转时销毁它们。然后在系统将bundle传递给activity onCreate(bundle)方法或从restoreInstanceState(Bundle)方法获取它时接收它。