【问题标题】:Activity restart on rotation change活动在轮换更改时重新启动
【发布时间】:2016-03-26 12:26:41
【问题描述】:

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

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

之前:

之后:

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

我怎样才能让 Activity/Fragment 保持活力,ToolbarAdView 工作正常?

谢谢

【问题讨论】:

  • 你可能需要 2 个布局 -- stackoverflow.com/questions/17945130/…
  • 将应用设为纵向/横向;应用程序是否需要允许两个方向;如果没有,你可以在活动标签下的清单中使用它 android:screenOrientation="portrait"
  • @DJphy 该应用需要能够旋转以获得良好的用户体验。
  • @Tasos 布局不是问题,ToolbarAdview 需要“重新创建”。
  • 我所能做的就是给这个问题投票;这就是我现在所做的;好问题;但我猜安卓帮不了你的用例:)

标签: android android-fragments android-activity screen-rotation adview


【解决方案1】:

需要复制文件

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

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

处理此类问题的正确方法是让Service 执行长时间运行的操作,ActivityFragment 应该启动服务然后立即“绑定”到它,执行通常的操作unbindbind 再次轮换。

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

在活动(或片段)绑定到Service 之后,它可以将自己注册为侦听器,并且服务向其报告操作的状态/进度。

最重要的是,如果活动与服务断开连接,服务可以使用命令startForeground在设备状态栏上发出通知,并不断通知用户操作进度,而无需@987654333 @

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

【讨论】:

  • 感谢您的回答。如果有效,我会尝试并接受。
  • 一个小问题。用FragmentActivity绑定更好吗?
  • 没有区别。从控制进度条的那个绑定。
  • 查看其他选项,例如加载程序,然后再进行这些长度
  • @brandall Loaders 用于在后台线程中加载数据以传递回 UI。在这种情况下,无论 UI 是否存在,他都需要完成该过程
猜你喜欢
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多