Activity 旋转改变时重启

Activity restart on rotation change

我有一个 activity。 activity 在 ViewPager 中包含 Fragment。该片段需要复制文件(带有ProgressDialog),但是当我在忙碌时旋转屏幕时,activity重新启动并且一切都停止了。

我尝试将 android:configChanges="orientation|screenSize" 添加到 AndroidManifest,但这也不是解决方案,因为那样的话我的 AdViewToolbar 将不会在旋转更改时重新加载:

之前:

之后:

(注意到 Toolbar 和 AdView 高度的区别了吗?)

如何让 Activity/Fragment 保持活动状态,使 ToolbarAdView 正常工作?

谢谢

needs to copy files

很少有人意识到 Android 是 ActivityFragment 不是执行长 运行 操作的地方,例如从互联网下载东西或复制文件。

ActivityFragment 都是 UI 元素,可以在没有太多警告的情况下销毁、重新创建。

处理此类问题的正确方法是让Service执行长运行操作,ActivityFragment应该启动服务然后立即 "bind" 到它,在旋转时再次执行通常的 unbindbind

您可以在此处阅读有关服务和边界服务的信息:http://developer.android.com/guide/components/bound-services.html

在 activity(或片段)绑定到 Service 之后,它可以将自己注册为侦听器,服务向其报告操作的 status/progress .

最重要的是,如果activity与服务断开连接,服务可以使用命令startForeground在设备状态栏上放置一个通知,并不断通知用户操作无需 activity

即可取得进展

我知道这种方式需要更多的代码并且更复杂。但这是正确的做法。