我有一项活动。该活动在Fragment
中包含ViewPager
。片段需要复制文件(使用ProgressDialog
),但是当我在忙碌时旋转屏幕时,活动会重新开始,一切都会停止。
我尝试将android:configChanges="orientation|screenSize"
添加到AndroidManifest,但这不是解决方案,因为我的AdView
和Toolbar
不会在轮换更改时重新加载:
在:
后:
(注意与工具栏和AdView高度的区别?)
如何通过有效Toolbar
和AdView
来保持活动/片段活着?
由于
答案 0 :(得分:1)
需要复制文件
人们通常对Android的了解很少,Activity
和Fragment
不是执行长时间运行操作的地方,例如从互联网下载内容或复制文件。
Activity
和Fragment
都是UI元素,可以在没有太多警告的情况下销毁,重新创建。
处理此类问题的正确方法是让Service
执行长时间运行的操作,Activity
或Fragment
应该启动服务,然后立即“绑定”它,在轮换时再次执行通常的unbind
和bind
。
您可以在此处阅读有关服务和边界服务的信息:http://developer.android.com/guide/components/bound-services.html
将活动(或片段)绑定到Service
之后,它可以将其自身注册为侦听器,并且服务会向其报告操作的状态/进度。
除此之外,如果活动与服务断开连接,服务可以使用命令startForeground
在设备状态栏上发出通知,并不断向用户通知操作进度,而无需activity
我知道这种方式会占用更多代码并且更复杂。但这是正确的做法。