问题标签 [android-configchanges]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
113 浏览

java - Service 与 AsyncTask 处理配置更改和 TCP 连接

情况是这样的:我的应用程序有一个活动,处理一个持久的 TCP 连接并使用很多东西动态更新 UI(对象的哈希表、按钮、ArrayLists、适配器......)。目前,我使用 AsyncTask 处理连接,并寻找一种保存方法:

  • 连接
  • 所有变量,例如动态创建的视图

当屏幕旋转或用户接到电话时,我发现:http : //www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html 对我来说看起来很酷。但我也到处读到我应该使用服务,因为它更适合长期的 TCP 连接。为什么选择异步任务:

  • 看起来我可以使用片段保存 TCP 连接
  • 无论如何,我都必须做类似的事情,以便从旋转/调用中保存对象、按钮等
  • 我只有一项需要连接的活动(服​​务是否指示不止一项?)

为什么服务:

  • 不需要使用 Fragments 来保存 TCP 连接(是真的吗?什么样的服务,正常,IntentService,因为我只有一个客户端,或者有界,我应该使用来执行此操作吗?)
  • 更适合长期连接

当我说“服务”时,我假设无论如何我都必须在服务中运行 AsyncTask,因此它不会处理主要活动上的连接。我该怎么办?

0 投票
1 回答
454 浏览

android - 屏幕旋转后无法从新的 ResultReceiver 修改 UI

我很绝望。情况就是这样:我有一项活动和一项服务。从服务到活动的通信依赖于一个非常简单的 ResultReceiver。

一切正常:活动接收异步消息并成功更新 UI。但是如果我旋转屏幕,我会失去连接:我知道“旧的”ResultReceiver 丢失了,我很好,问题是我创建了一个新的 ResultReceiver 并将其发送到服务。我在创建时这样做:

和服务:

每次旋转屏幕时都会成功打印“REBIND”。serviceReceiver 是我发送东西的地方:如果我将它设置为 null onRebind(但不是 onStartCommand 或 onBind,所以我确定这发生在配置更改之后),当我尝试发送东西时,我会获得一个 nullpointerexception,所以我猜它实际上得到了更新(即从新活动中获取“新”ResultReceiver)。

我不想“保存”旧的 ResultReceiver 并在重新创建活动时“重新连接”它;我可以创建一个新的 ResultReceiver 并将其传递给 onRebind() 服务,该服务将对其进行更新。但它不起作用。

屏幕旋转和重新绑定后,“新”ResultReceiver 的 onReceiveResult() 无法访问 UI - 它更改的内容不会显示。我不知道在哪里寻找错误:在屏幕旋转之前一切正常,所以它必须与服务持有对旧事物的引用有关,我猜。

0 投票
1 回答
355 浏览

android - 当方向改变时,不要重新加载活动并以正确的顺序放置片段

我在我的应用程序中使用了framgents,并且我在平板电脑上具有横向(左右)和纵向(上下)的双窗格布局。

我有一个将片段加载到左侧选择窗格中的活动,然后您可以在某些 Spinner 中选择多个条件进行搜索。在右侧的片段中显示了 ListView 中的搜索结果。

如果我android:configChanges="orientation"在 Manifest.xml 中的此活动中使用搜索结果,则会保存搜索结果,但我在横向模式下上下都有窗格布局,而不是应该的左右。如果我不使用android:configChanges="orientation",我的两个窗格布局都是正确的(横向模式下的左右),但我没有搜索结果,活动重新启动。

我该如何解决?任何想法?

非常感谢。

0 投票
1 回答
360 浏览

android - 方向更改后使用 Google 登录的 Android 中的多个权限对话框

我一直在努力解决这个问题——我在这里广泛搜索了答案,但没有找到任何答案(如果我错过了一个解决方案,请道歉)。我正在实现“使用 Google 登录”按钮/逻辑,除了更改设备方向外,一切正常。在这种情况下,我会看到 Google 权限对话框的多个副本。(因此,如果我更改了 3 次方向,则在返回到原始屏幕之前,我必须取消权限对话框的三个副本)。(可以在此处找到权限对话框的示例)。

我以为我的代码过于复杂,所以我做了一个新活动,只使用了 Google 教程页面(入门/登录)中的代码,但我仍然遇到同样的问题。(代码如下)

(FWIW,我还尝试使用 IntelliJ 的“New --> Activity --> Login Activity”选项创建一个新的 Activity,结果相同。)

除此之外,我尝试运行 Google 的“快速入门”应用程序,是的,同样的问题仍在发生!

有没有其他人在没有这种行为的情况下成功实现了“使用 Google 登录”?我想作为最后的手段,我可​​以强制我的身份验证活动始终以纵向显示,但我正在尝试查看是否有除此之外的解决方案。

先感谢您!

以下是我的“简化”活动中的代码:

0 投票
1 回答
540 浏览

android - 为设备构建 Android 操作系统

我正在尝试构建 Android 操作系统。我已经设置好我的机器,一切正常,但是选择设备配置是我关心的问题。当我输入午餐时,我得到:

我有一个名为 Injoo 1s 的设备,这就是我想用来测试的设备。如何选择哪种配置。或者,我必须编写一些代码来解决这个问题。您的回复将不胜感激。谢谢你。

0 投票
1 回答
446 浏览

android - Android - 如何防止 ViewPager 的加载器在配置更改时重新启动?

我已经按照这些步骤创建了一个ViewPager,但是当设备配置更改(例如,设备轮换)时,我遇到了加载程序重新启动的问题。

这不仅会导致不必要的查询,而且还会通过将用户带回到第一个项目(即,离开他们在旋转设备之前查看的项目)来重置 UI。

我试过调用我的类方法setRetainInstance(true)返回的片段,但没有帮助。getItem()ScreenSlidePagerAdapter

这里有一个类似的问题,但我期待/希望有更好的解决方案?

0 投票
1 回答
646 浏览

android - 以编程方式设置方向,没有活动娱乐?

每当我使用setRequestedOrientation(int)它时,它的行为与我在Manifest.xml. (这是预期的)

我读到(来自文档):

如果 Activity 当前处于前台或以其他方式影响屏幕方向,则屏幕将立即更改(可能导致 Activity 重新启动)

实际上,这意味着每当启动应用程序时,虽然设备的方向不是将设置的方向setRequestedOrientation(int),但活动将被创建两次(一次“正常”,一次反映请求的方向)。

到目前为止,让我的活动 100% 配置更改证明是不值得的,我想要的是一种在代码中设置请求方向的方法,而不必两次创建我的活动。有办法吗?

(最好不要使用骇人听闻的解决方法,例如在 configChanges 中设置 'orientation' 标志)

编辑:

接受的答案是正确的,它根本不合逻辑(没有意义)。对于新读者,我所做的是添加一个 stub-activity (主要是没有太多作用的空活动)。它所做的只是getRequestedOrientation()在它与我想要的不同时使用,我将调用setRequestedOrientation(int),否则启动我想要的活动并在其 onCreate 中还调用 以setRequestedOrientation(int)使其保持在请求的方向。

0 投票
0 回答
460 浏览

android - 在配置更改时停止片段重新创建(纵向和横向的不同布局)

这是我的平板电脑纵向和横向的布局设计

  • 纵向布局
    • 菜单导航抽屉和
    • 内容片段
  • 横向布局(双窗格)
    • 左侧的菜单片段
    • 右侧的内容片段

我正在使用导航抽屉的支持库android.support.v4.widget.DrawerLayout

用例:

  1. 应用程序以横向模式启动
  2. 横向布局 - 双窗格膨胀并加载数据
  3. 方向改变
  4. 菜单片段被破坏和分离
  5. 纵向布局 - 内容片段膨胀的导航抽屉
  6. 导航抽屉附加到活动并立即分离
  7. * 因为横向菜单片段由系统重新创建并附加到活动。*
  8. 应用程序崩溃,因为导航抽屉已分离

我尝试了stackoverflow 用户goRGon建议的解决方案,它似乎有效。

但是需要您的建议,这是否是停止片段重新创建的最佳方式?

0 投票
1 回答
32 浏览

android - Android vs 配置改变

我为我的英语道歉,但用谷歌翻译。我想了解为什么带有 Android 的 Google 会在每次更改时重新启动活动,而您会丢失所有显示的数据。你怎么解决这个问题?难道他们不能让它成为可选的吗?在我阅读的每个论坛上,我都会使用 onSaveInstanceState、onRestoreInstanceState、onConfigurationChanged 方法,但没有很好地解释如何使用它们。如果我有一个复杂的应用程序,有很多对象,有 EditText,有标记,多边形,我不得不用临时变量手动保存所有东西?还有另一种更快容易的方法吗?你有什么实际的例子可以给我看吗?希望各位知道的帮我理解一下,谢谢大家。

0 投票
4 回答
4606 浏览

android - ActivityInfo.SCREEN_ORIENTATION_LOCKED 未锁定方向 - Android

这是 API 18 中的一个功能,我无法让它真正锁定。我一直在阅读如何手动处理自己的配置更改,并尝试了很多东西,但我目前的代码无效。

目标:我需要有一个活动,在用户拍摄视频(将他们带回应用程序)后,着陆页应该是横向或纵向的,无论用户以哪种方式握住手机。但是如果他们决定去横向,我想锁定那个位置,所以他们不能回到纵向(如果他们回去会导致视频观看错误)。所以他们一开始有一个选择,但如果他们选择那个,就必须留在风景中。但是我该怎么做呢?

这是我到目前为止所尝试的:

  1. 将其android:configChanges="keyboardHidden|orientation|screenSize"放在<activity>清单中我的活动标签中。

  2. 用这个覆盖onConfigurationChanged()方法:

    /li>
  3. 我有 2 种 xml 布局,一种用于布局文件夹中的肖像,另一种用于 layout-land 文件夹中的风景。

我得到的结果是我可以让布局在方向改变时显示,但我不能让它锁定。我正在使用带有 的设备KitKat,所以它应该锁定在那里,但它没有。

我在这里读过的关于锁定方向(或解决方法)的每一篇文章似乎都有 3 或 4 年的历史,并且基本上暗示了我已经在尝试的内容。任何人有任何新信息吗?

谢谢。